http 요청에 응답하는 노드 서버
server1.js
const http = require('http');
http.createServer((req, res) => {
res.write('<h1>Hello Node!</h1>');
res.write('<p>Hello server</p>');
res.end('<p>Hi, Minji!</p>');
})
.listen(8080, () => {
console.log('8080번 포트에서 대기 중입니다.')
});
위는 listen 메서드로 특정 포트에 연결하는 코드이다.
스크립트를 실행하면 8080 포트에 연결된다.
localhost: 컴퓨터 내부 주소로 외부에서 접근 불가
port: 서버 내에서 프로세스를 구분하는 번호
비동기이기 때문에 에러를 잡아야 함. 알아두기만 하기
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
res.write('<h1>Hello Node!</h1>');
res.end('<p>Hello Minji!</p>');
});
server.listen(8080);
server.on('listening', () => {
console.log('8080번 포트에서 서버 대기 중입니다!');
});
server.on('error', (error) => {
console.error(error);
});
코드를 수정하면 즉시 반영되는 것이 아니라 껐다 켜야 서버에 반영된다.
html 문서를 작성했는데 어떤 브라우저(사파리 등)은 html인지 문자열인지 구별 못함
아래 코드처럼 직접 명시하여 해결 가능
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
createServer를 여러 번 호출하면 된다.
단, 두 서버의 포트를 다르게 지정해야한다. 예를 들면 80과 81
fs 모듈로 html 읽어서 전송
write와 end에 문자열이 들어가면 비효율적이기 때문이다.
const http = require('http');
const fs = require('fs').promises;
http.createServer(async (req, res) => {
try {
const data = await fs.readFile('./server2.html');
res.writeHead(200, { 'Content-Type': 'text/html; charset = utf-8' });
res.end(data);
} catch (err) {
console.error(err);
res.writeHead(500, { 'Content-Type': 'text/plain; charset = utf-8' });
res.end(err.message);
}
})
.listen(8081, () => {
console.log('8081번 포트에서 서버가 대기 중입니다.');
});