createServer
: 웹 서버 객체를 만듦const http = require('http');
//모든 node 웹 서버 애플리케이션은 웹 서버 객체를 만들어야 함!
const server = http.createServer((request, response) => {
// 여기서 작업이 진행됩니다!
});
→ 이 서버로 오는 HTTP 요청마다 createServer
에 전달된 함수가 한 번씩 호출됨
creatServer
가 반환하는 서버 객체는 EventEmitter 이다.// 이렇게도 사용가능! 위에 코드는 축약문법
const server = http.createServer();
server.on('request', (request, response) => {
// 여기서 작업이 진행됩니다!
});
listen
: 서버가 사용하고자 하는 포트 번호를 받아서 서버를 시작함.const PORT = 5000;
const HOST = 'localhost';
server.listen(PORT, HOST);
Node.js v14.12.0 Documentation
request
request
객체에 유용한 프로퍼티를 활용해서 메서드와 url을 확인 할 수 있다. const { method, url } = request;
request
객체는 IncomingMessage의 인스턴스이다.
header또한 request에 전용 객체가 있다.
const { headers } = request;
const userAgent = headers['user-agent'];
→ 모든 헤더는 소문자로만 표현된다.
let body = [];
request.on('data', (chunk) => {
body.push(chunk);
}).on('end', () => {
body = Buffer.concat(body).toString();
// 여기서 `body`에 전체 요청 바디가 문자열로 담겨있습니다.
});
→ data
이벤트를 통해 chunk를 받아서 배열에 담아 end
이벤트에서 문자열로 합침
(request객체가 ReadableStream 인터페이스를 구현하고 있으므로, data
와 end
이벤트를 사용 )
request
정리 const http = require('http');
http.createServer((request, response) => {
const { headers, method, url } = request;
let body = [];
request.on('error', (err) => {
console.error(err);
}).on('data', (chunk) => {
body.push(chunk);
}).on('end', () => {
body = Buffer.concat(body).toString();
// 여기서 헤더, 메서드, url, 바디를 가지게 되었고
// 이 요청에 응답하는 데 필요한 어떤 일이라도 할 수 있게 되었습니다.
});
}).listen(8080); // 이 서버를 활성화하고 8080 포트로 받습니다.
response
//statusCode로 상태코드 설정
response.statusCode = 404;
//1. 암묵적인 헤더
response.setHeader('Content-Type', 'application/json');
response.setHeader('X-Powered-By', 'bacon');
------------------
// 2. 명시적인 헤더
response.writeHead(200, {
'Content-Type': 'application/json',
'X-Powered-By': 'bacon'
});
response.write('<html>');
response.write('<body>');
response.write('<h1>Hello, World!</h1>');
response.write('</body>');
response.write('</html>');
response.end();
------------------------------
response.end('<html><body><h1>Hello, World!</h1></body></html>');
! 바디에 데이터 청크를 작성하기전에 상태코드와 헤더를 먼저 작성해야 함!!