- 순수 nodejs로 간단하게 웹 서버를 만드는 방법을 정리합니다.
참고 자료 : https://nodejs.org/ko/docs/guides/anatomy-of-an-http-transaction/- node server/작성한_파일명.js 로 서버를 실행할 수 있다.
const http = require('http');
const server = http.createServer((request, response) => {
// 여기서 작업이 진행됩니다!
});
또는
const server = http.createServer();
server.on('request', (request, response) => {
// 여기서 작업이 진행됩니다!
});
위와 같이 http.createServer를 통해서 웹 서버 객체를 만들 수 있습니다.
createServer에 서버에서 일어날 활동을 작성합니다.
request 객체 내부에는 headers, method, url등이 들어있습니다.
method와 url을 보고 각 메소드에 맞는 응답을 할 수 있습니다.
let body = [];
request.on('data', (chunk) => {
body.push(chunk);
}).on('end', () => {
body = Buffer.concat(body).toString();
// 여기서 `body`에 전체 요청 바디가 문자열로 담겨있습니다.
});
'data'와 'end' 이벤트에 이벤트 리스너를 등록해서 데이터를 받을 수 있습니다.
받은 데이터는 body에 저장되며, end에서 데이터를 처리하여 reponse에 담아 보낼 수 있다.
request.on('error', (err) => {
// 여기서 `stderr`에 오류 메시지와 스택 트레이스를 출력합니다.
console.error(err.stack);
});
response.statusCode = 404; // 클라이언트에게 리소스를 찾을 수 없다고 알려줍니다.
or
response.statusCode = 200; // 정상 작동
or
response.statusCode = 201; // 새로운 리소스가 생성되었음을 알린다.
response.setHeader('Content-Type', 'application/json');
response.setHeader('X-Powered-By', 'bacon');
response.writeHead(200, {
'Content-Type': 'application/json',
'X-Powered-By': 'bacon'
});
response.write('Hello' + body);
response.end();
or
response.end("Hello" + body);
if (method === 'POST') {
let body = [];
request.on('data', (chunk) => {
body.push(chunk);
}).on('end', () => {
body = Buffer.concat(body).toString();
// body에 문자열로 변환된 request body의 내용이 담겨있다.
response.end(body.toUpperCase());
// 대문자로 변환해서 response에 담아 보낸다.
});
} else {
response.statusCode = 404;
response.end("ERROR Method");
}
위와 같이 모든 매소드에 대해서 작동할 수 있도록 코드를 작성해야 한다.
어떤 매소드의 request가 올지 모르기 때문이다.
(에러를 방지한다.)