Node.js 2일차 - 2 TIL

김민지·2023년 10월 10일
0

Node.js

목록 보기
3/8

섹션 3. http 모듈로 서버 만들기

1. Http 서버 만들기

(1) 노드로 http 서버 만들기

http 요청에 응답하는 노드 서버

  • createServer로 요청 이벤트에 대기
  • req 객체는 요청에 관한 정보, res 객체는 응답에 관한 정보가 담겨 있다.

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 포트에 연결된다.

(2) localhost와 포트

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);
});

코드를 수정하면 즉시 반영되는 것이 아니라 껐다 켜야 서버에 반영된다.


2. fs로 HTML 파일 읽어 제공하기

html 문서를 작성했는데 어떤 브라우저(사파리 등)은 html인지 문자열인지 구별 못함
아래 코드처럼 직접 명시하여 해결 가능

res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });

(1) 한 번에 여러 서버 실행

createServer를 여러 번 호출하면 된다.
단, 두 서버의 포트를 다르게 지정해야한다. 예를 들면 80과 81

(2) fs로 HTMl 파일 읽어 제공하기

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번 포트에서 서버가 대기 중입니다.');
  });
profile
안녕하세요

0개의 댓글