Back-end/Node.js

[Node.js] 요청과 응답 서버 (http)

poppy 2021. 7. 10. 16:13
반응형

요청과 응답 서버 만들기

 

서버에서 요청을 받고 응답을 어떻게 하는지 알아보겠습니다! 다음은 서버의 간단한 요청과 응답의 예시입니다

const http = require('http');

http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
  res.write('<h1>Hello Node!</h1>');
  res.end('<p>Hello Server!</p>');
})
  .listen(8080, () => { // 서버 연결
    console.log('8080번 포트에서 서버 대기 중입니다!');
  });

결과

터미널에서 "node 파일명" 명령어를 입력하면 서버가 실행되고 웹에서 "http://localhost:8080" 에 접속하면 위와 같은 결과를 볼 수 있습니다! http 서버가 있어야 웹 브라우저의 요청을 처리할 수 있으므로 http 모듈을 사용합니다.

createServer() - 요청받고 응답할 수 있는 http.Server 개체를 만듭니다. req는 request를 의미하며 요청에 관한 정보를 담고 있고, res는 respond를 의미하며 응답에 관한 정보를 담고 있습니다. 

res.writeHead(상태코드, 헤더 정보) - 응답 헤더에 대한 정보를 기록하는 메서드입니다. 상태 코드는 HTTP 상태코드를 말하는데 200, 404, 500 등 이다. 'text/html' 은 응답의 콘텐츠 형식이 HTML 이라는 의미이고, 'utf-8' 은 한글 표시를 하라는 의미이다.

res.write() - 본문(body)에 보여지는 부분을 쓰는 메서드이다.

res.end() - 응답을 종료하는 메서드이다.

.listen(포트번호, 콜백함수) - 서버와 연결할 포트 번호를 지정하고, 포트 연결 완료 후 실행된 콜백함수를 입력하면 된다.

 

경로 지정하기

const http = require('http');

http.createServer((req, res) => {
  try {
    if (req.method === 'GET') {
      if (req.url === '/') { // http://localhost:8080/
        res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
        res.write('<h1>Hello Node!</h1>')
        res.end('<p>this is node page</p>');
      } else if (req.url === '/view') { // http://localhost:8080/view
        res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
        res.write('<h1>Hello View!</h1>')
        res.end('<p>this is view page</p>');
      } 
    }  
    // 경로가 / or /view 가 아닌 경우
    res.writeHead(404);
    res.end('NOT FOUND');
  } catch (err) {
    console.error(err);
    res.writeHead(500, { 'Content-Type': 'text/plain; charset=utf-8' });
    res.end(err.message);
  }
})
  .listen(8080, () => {
    console.log('8080번 포트에서 서버 대기 중입니다');
  });

결과

url의 경로를 만들어서 경로에 따라 웹 페이지가 다르게 동작하게 할 수도 있습니다. req.method는 요청 방식을 말하며 GET, POST 등이 있습니다. req.url 을 통해 경로에 따라 다른 페이지를 만들어낼 수 있습니다. 

반응형