1. 서버 생성
- 모든 node 웹 서버 애플리케이션은 웹 서버 객체를 만들어야 한다. 이 때
createServer()
를 이용하여 server 객체를 생성 한다.
- 이 서버로 오는 HTTP 요청마다
createServer
에 전달된 함수가 한 번씩 호출된다. createServer
가 반환한 Server
객체는 EventEmitter
이다.
const http = require('http');
>
const server = http.createServer((request, response) => {
});
const server = http.createServer();
server.on('request', (request, response) => {
});
2. 요청 바디 작성
- 서버를 생성한 후, 사용자로 부터 http 요청이 들어오면 블럭내부의 코드를 실행해서 응답한다.
data
와, end
이벤트에 이벤트 리스너
를 등록해서 데이터를 받을 수 있다.
- 각
data
이벤트에서 발생시킨 chunk
는 Buffer
이다. 이 chunk
가 문자열 데이터이기 때문에 data
를 배열에 담고 end
이벤트에서 이어붙인 다음 문자열로 만드는 것이 가장 좋은 방법이다.
const http = require('http');
const server = http.createServer((request, response) => {
let body = [];
request
.on('data', (chunk) => {
body.push(chunk);
})
.on('end', () => {
body = Buffer.concat(body).toString();
});
});
EventEmitter
- 노드에서는 대부분의 이벤트를 비동기 방식으로 처리하며, 비동기 방식으로 이벤트를 전달한다.
메서드 | 설명 |
---|
on(event, listner) | 지정한 이벤트 리스너를 추가(계속 연결한 상태 유지) |
once(event, listner) | 지정한 이벤트의 리스너를 추가하지만 한 번 실행한 후에는 자동으로 리스너 제거 |
removeListner(evnet, listner) | 지정한 이벤트에 대한 리스너를 제거함 |
3. 응답 헤더, 바디 작성
- 클라이언트에 웹 페이지를 제공하기 위해
response
객체의 메서드인 writeHead
와 end
를 사용한다.
response
객체는 서버로 웹브라우저나 또는 앱으로 부터 어떤 요청이 있을 때 사용자 측으로 값을 반환해 줄 때 사용하는 객체이다.
- 실제 코드 값을 end() 함수로 전달하면 브라우저는 해당 컨텐츠를 받은 후 html 형태로 화면에 출력한다.
기본 문법
response.setHeader([statusCode], [object]);
response.end([data], [encoding]);
const http = require('http');
const server = http.createServer((request, response) => {
let body = [];
request
.on('data', (chunk) => {
body.push(chunk);
})
.on('end', () => {
body = Buffer.concat(body).toString();
response.writeHead(200, defaultCorsHeader);
response.end(body.toUpperCase());
});
});
CORS(Cross-Origin Resource Sharing)
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
};
4. 서버 실행
- server 객체의 메서드
listen
을 사용하여 서버를 실행한다.
기본 문법
server.listen(port, ip, [, callback]))
listen
함수로 4999번 포트를 가진 서버를 실행한다.
- 서버가 실행된 것을 확인하기 콘솔창에서 확인하기 위해
http server listen on
로그를 출력한다.
const http = require('http');
const server = http.createServer((request, response) => {
let body = [];
request
.on('data', (chunk) => {
body.push(chunk);
})
.on('end', () => {
body = Buffer.concat(body).toString();
response.writeHead(200, defaultCorsHeader);
response.end(body.toUpperCase());
});
});
server.listen(4999, 'localhost', () => {
console.log(`http server listen on`);
});
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
};
const http = require('http');
const PORT = 4999;
const ip = 'localhost';
const server = http.createServer((request, response) => {
if (request.method === 'OPTIONS') {
response.writeHead(200, defaultCorsHeader);
response.end('hello mini-server sprints');
console.log(request.method)
}
if (request.method === 'POST' && request.url === '/upper') {
let body = [];
request
.on('data', (chunk) => {
body.push(chunk);
})
.on('end', () => {
body = Buffer.concat(body).toString();
response.writeHead(200, defaultCorsHeader);
response.end(body.toUpperCase());
});
} else if (request.method === 'POST' && request.url === '/lower') {
let body = [];
request
.on('data', (chunk) => {
body.push(chunk);
})
.on('end', () => {
body = Buffer.concat(body).toString();
response.writeHead(200, defaultCorsHeader);
response.end(body.toLowerCase());
});
} else {
response.statusCode = 404;
response.end();
}
});
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
};