http.Server
└─ EventEmitter
request
└─ IncomingMessage
└─ Readable Stream
└─ EventEmitter
// const { headers, method, url } = request;
response
└─ ServerResponse
└─ Writable Stream
└─ EventEmitter
header 는 전부 소문자
request 는 Readable Stream 이기 때문에
write = 응답 body 일부 쓰기(청크별로 가능)
end = 응답 종료 (end 에 다 쓰면 body 다 쓸 수 있습니다. )
pipe = readable.pipe(writable)
const http = require('node: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();
// BEGINNING OF NEW STUFF
response.on('error', err => {
console.error(err);
});
response.statusCode = 200;
response.setHeader('Content-Type', 'application/json');
// Note: the 2 lines above could be replaced with this next one:
// response.writeHead(200, {'Content-Type': 'application/json'})
const responseBody = { headers, method, url, body };
response.write(JSON.stringify(responseBody));
response.end();
// Note: the 2 lines above could be replaced with this next one:
// response.end(JSON.stringify(responseBody))
// END OF NEW STUFF
});
})
.listen(8080);
const http = require('node:http');
http
.createServer((request, response) => {
request.on('error', err => {
console.error(err);
response.statusCode = 400;
response.end();
});
response.on('error', err => {
console.error(err);
});
if (request.method === 'POST' && request.url === '/echo') {
request.pipe(response);
} else {
response.statusCode = 404;
response.end();
}
})
.listen(8080);
이벤트 이름에 callback 등록
→ 나중에 이벤트 발생
→ 등록된 callback 실행
Instantiate an HTTP server with a request handler function, and have it listen on a port.
요청 처리 함수를 갖춘 HTTP 서버를 인스턴스화하고, 특정 포트에서 요청을 기다리도록 설정합니다.
Get headers, URL, method and body data from request objects.
request 객체로부터 헤더, URL, 메서드, 그리고 바디 데이터를 가져옵니다.
Make routing decisions based on URL and/or other data in request objects.
request 객체에 포함된 URL 및/또는 기타 데이터를 기반으로 라우팅 결정을 내립니다.
Send headers, HTTP status codes and body data via response objects.
response 객체를 통해 헤더 정보, HTTP 상태 코드, 그리고 본문 데이터를 전송할 수 있습니다.
Pipe data from request objects and to response objects.
request 객체에서 데이터를 추출하여 response 객체로 전송합니다.
Handle stream errors in both the request and response streams.
request 및 response 스트림 모두에서 발생하는 오류를 적절히 처리해야 합니다.