개인공부

Mini node 서버 체험?해보기

JJ_hyun 2022. 6. 16. 15:54

node 에는 http 라는 내장 모듈이 있는데 node js 각 http 를 통해 데이터를 전송할 수 있다. 

 

http.createServer([requestListener])  => 서버에 요청이 올 때 마다 내부 코드를 실행한다. 

( requestListener = function )

 

const http = require('http');

http.createServer( function(request,response){
  request 관련 처리방식,
  response 관련 처리방식
  둘을 각각 처리를 해준다
 }

비슷한 방식으로 이번에 보게된 코드가 있는데 

const server = http.createServer((request,response)=>{
	request 관련 코드
	response 관련 코드 
})
server.listen([part][, ip][, function])

이런 형식의 코드를 보았다. 

 

 

server.listen([ part][, host][, backing][, callback]) to TCP servers 

-> listen() 메서드란? 요청에 대해서 응답할 수 있도록 HTTP 서버를 구동시키는 API

( => 요청이 실제로 처리하려면 listen 메서드가 server 객체에서 호출되어야 한다. => server요청하려면 걍 써라 라고 이해함. )

만든 웹서버의 listening 을 시작할 때 3000번 part를 바라보고 있다. 

 

 

요청바디 

POST 나 PUT 요청을 받을 때 애플리케이션의 요청 바디는 중요하다. 

작성되었던 코드를 보면서 차근차근 이해를 해본다..

 

  if (request.method === 'POST' && request.url === '/upper') {
    let body = [];
    request.on('data', (chunk) => {
      body.push(chunk);
    }).on('end', () => {
      body = Buffer.concat(body).toString();
      response.end(body.toUpperCase());
    });
  }

1. 조건식 안에 method 와 url 을 구분해 주고, 표현식 안에는 데이터를 전송할 빈 배열을 하나 만들어준다.

2. request 객체에는 'data' 그리고 'end' 두가지의 이벤트 리스너를 등록해서 쓸 수 있다. 

3. 먼저 'data'를 첫번째 인자로 주고, 두번째 인자로는 함수를 넣는데 

함수의 내용은 클라이언트에서 입력받은 데이터를 빈 배열에 넣는 작업을 해준다. 

4. 두번째 이벤트 리스너인 'end'는 데이터를 가공해 줄 것이다. 

현재 body에 들어있는 데이터 chunk는 Buffer 형식? 으로 들어가 있다. 이를 우리가 읽을 수 있게 가공을 해줘야 하는데

Buffer.concat(body).toString()을 통해 우리가 읽을 수 있는 데이터로 만들어 준다 ( like, 데이터.json() )

5. 이제 응답으로 보내주어야 하는데 response.end 에 body를 toUpperCase 로 만들어 준다. 

 

몇가지 체크하고 넘어가야 하는데,,

첫번째로 요청때마다 response.writeHead(200, header내용)이 있다면,

좀 더 디테일? 하게 데이터를 body에 담아 보낼 수 있을 것 같다. 

 

지금의 경우 header를 작성하여 상위에 한번에 보내주었다. 그래서 매번 요청에 필요없이 응답을 받을 수 있는 것이다. 

또한 마지막에 오류처리를 해주었는데, 조건이 맞지 않는 모든 경우에 오류처리를 하라고 하였다. 

 

  else {
    response.statusCode = 404;
    response.end();
  }