TIL # 2021.12.30

kdobro_dev·2021년 12월 30일
0

TIL (Today I Learned)

목록 보기
27/56
post-thumbnail

Node.js # Request

📝오늘 배운 내용

오늘은 Node.js 과제를 풀면서 사실 걱정이 되게 많았다. 서버를 배운지 며칠 지나지 않아 아직 여러가지 내용들이 정리가 되지 않은 상태였기 때문이다. 어찌됐던 과제는 완료했지만 다시 한 번 복습하며 코드를 하나하나 분석해볼 필요성을 느껴 시도해봤다. 정말 생소한 코드들이여서 많이 당황스러웠지만 늘 그렇듯 새로운 것을 배우면 흥미롭고 재미가 있다.

const http = require('http');

const PORT = 4999;

const ip = 'localhost';

const server = http.createServer((request, response) => {
  // 메소드가 options이면을 구현해야 하니까, request객체의 request.method 메소드를 사용하면 될 것 같다.
  if (request.method === 'OPTIONS') {
    // CORS 설정을 응답으로 돌려줘야 하기 때문에 response.writeHead 메소드를 사용하여 상태코드, headers를 응답해준다. 
    // defaultCorsHeader가 headers이다.
    response.writeHead(200, defaultCorsHeader); 
    // response.end()는 응답을 끝낸다는 메소드이다(모든 응답 헤더와 본문이 전송되었음을 서버에 알린다.) // 모든 응답에서 이 메소드가 호출되어야 한다(확실하진 않음)
    response.end();
  }
  // method가 POST이고, url이 /upper이면,(request.url)이란 것도 있다.
  if (request.method === 'POST' && request.url === '/upper') {
    // 대문자로 응답을 해줘야 한다.
    // HTTP 트랜잭션 해부 홈페이지를 토대로 작성했다. https://nodejs.org/ko/docs/guides/anatomy-of-an-http-transaction/
    let body = ''
    // request.on('data', callback) // request에 data가 있을 경우, string값으로 변환
    request.on('data', (chunk) => {
      body = body + chunk;
    });
    // request.on('end', callback) // data 처리가 다 끝났음을 나타내준다.
    request.on('end', () => {
      body = body.toUpperCase();
      response.writeHead(200, defaultCorsHeader);
      // 응답에 response.end() 메소드를 사용하여 대문자로 변환한 데이터를 호출한다.
      response.end(body);
    })
  } else if (request.method === 'POST' && request.url === '/lower') {
    let body = ''
    // request.on('data', callback) // request에 data가 있을 경우, string값으로 변환
    request.on('data', (chunk) => {
      body = body + chunk;
    });
    // request.on('end', callback) // data 처리가 다 끝났음을 나타내준다.
    request.on('end', () => {
      body = body.toLowerCase();
      response.writeHead(200, defaultCorsHeader);
      // 응답에 response.end() 메소드를 사용하여 소문자로 변환한 데이터를 호출한다.
      response.end(body);
    })
  } else {
    // response.writeHead 메소드를 사용하여 에러 처리를 해준다. 상태코드를 404로 해주면 될 것 같다. 
    response.writeHead(404, defaultCorsHeader);
    // 어떠한 데이터도 호출하지 않아도 되니 그냥 end()
    response.end();
  }
  
  console.log(
    `http request method is ${request.method}, url is ${request.url}`
  );
  // response.writeHead(200, defaultCorsHeader);
  // response.end('hello mini-server sprints');
});
//server라는 서버를 활성화 하고 PORT = 4999 포트로 받는다. ip = 'localhost'
server.listen(PORT, ip, () => {
  console.log(`http server listen on ${ip}:${PORT}`);
});

const defaultCorsHeader = {
  // 모든 도메인(*)에서의 요청을 수락한다.
  'Access-Control-Allow-Origin': '*',
  // GET, POST, PUT, DELETE, OPTIONS의 methods만을 허용한다.
  'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
  // header에는 content-type과 accept만 쓸 수 있다.
  'Access-Control-Allow-Headers': 'Content-Type, Accept',
  // preflight request는 10초까지 허용 된다.
  'Access-Control-Max-Age': 10
};
profile
do your best at any moment

0개의 댓글