JavaScript/node.js
늦은 node.js basic-server 만들기...
짱닭
2020. 11. 18. 22:03
반응형
기본설정
expressjs.com/ko/starter/hello-world.html
const http = require('http');
const { report } = require('process');
const PORT = 5000;
const ip = 'localhost';
서버설정 ( 라우팅, CORS, 에러 )
request.on()에서 'data', 'end' 처럼 이벤트에 콜백함수가 붙은것은 모두 비동기로 처리된다.
const server = http.createServer((request, response) => {
console.log(
`http request method is ${request.method}, url is ${request.url}`
);
//request 객체의 .method로 요청 메서드를 분기한다 (라우팅)
if (request.method === 'OPTIONS') {
response.writeHead(200, defaultCorsHeader);
response.end();
}
//request 객체의 .url로 요청 경로를 분기한다 (라우팅)
if (request.method === 'POST') {
if (request.url === '/lower') {
let data = '';
request.on('data', chunk => {
data = data + chunk;
});
//request 객체의 .method로 요청 메서드를 분기한다 (라우팅)
//request 객체의 .url로 요청 경로를 분기한다 (라우팅)
//POST 요청의 body(payload)부분은 request.on()안에서 data 이벤트?가 발생했을 때 chunk(변수명)으로 받는다.
받은 payload는 json이나 Buffer 형태이기 때문에 위처럼
let data='';로 선언해서 data = data + chunk;로 받거나,
let body=[]
request.on('data', (chunk) => {
body.push(chunk);
}
위처럼 배열로 받아서 밑의 request.on('end', ...) 부분으로 넘겨준다.
request.on('end', () => {
data = data.toLowerCase();
response.writeHead(201, defaultCorsHeader); //응답헤더 설정
response.end(data); //응답 (String, Buffer 타입만 응답할 수 있다.)
});
}else if (request.url === '/upper') {
let data = '';
request.on('data', chunk => {
data = data + chunk;
});
request.on('end', () => {
data = data.toUpperCase();
response.writeHead(201, defaultCorsHeader);
response.end(data);
});
}
}else if(request.method === 'GET') {
if(request.url !== '/'){ //에러 핸들링
response.writeHead(404, defaultCorsHeader);
response.end('error');
}
}
});
에러 핸들링은 GET 메서드로 오는 요청 중에서 허용한 url이 아닌 경우
404 상태메시지와 'error' 문자열을 응답으로 보낸다.
//ip와 PORT로 전달된 주소로 오는 요청을 받는다.
server.listen(PORT, ip, () => {
console.log(`http server listen on ${ip}:${PORT}`);
});
const defaultCorsHeader = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
'Access-Control-Allow-Headers': 'Content-Type, Accept',
'Access-Control-Max-Age': 10
};
반응형