ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 4.6 Mini Node Server
    코드스테이츠/JavaScript 2023. 4. 7. 00:12
    HTTP  트랜지션 해부에 관한 Node.js 레퍼런스를 참고
    https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction
     

    Anatomy of an HTTP Transaction | Node.js

    Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

    nodejs.org

     

    • POST에 문자열을 담아 요청을 보낼 때는 HTTP 메시지의 body(payload)를 이용합니다.
    • 서버는 요청에 따른 적절한 응답을 클라이언트로 보내야 합니다.
    • CORS 관련 헤더를 OPTIONS 응답에 적용해야 합니다.
      • 클라이언트의 preflight request에 대한 응답을 돌려줘야 합니다.
      • preflight request에 대한 응답 헤더는 이미 작성되어 있습니다.

    요구조건

     

     

    basic-server.js
    const http = require('http');//http 모듈을 불러옴
    
    const PORT = 4999;
    
    const ip = 'localhost';
    
    const server = http.createServer((request, response) => { //서버생성
      const {method, url, headers} = request
    
      let body = [];
      request.on('data', (chunk) => {
        body.push(chunk);
      }).on('end', () => {
        body = Buffer.concat(body).toString();
    
      if(request.method === 'POST' && request.url === '/upper'){ //요청 URL에 따라 다른 응답을 전송
        response.writeHead(200, defaultCorsHeader) //whiteHead 메소드를 이용해 헤더 데이터를 전송하다.
        response.end(body.toUpperCase()) //end 메소드는 모든 응답 헤더와 본문이 전송됐음을 서버에 알린다.
      }else if(request.method === 'POST' && request.url === '/lower'){
        response.writeHead(200, defaultCorsHeader)
        response.end(body.toLowerCase())
      }else if(request.method === 'OPTIONS'){
        response.writeHead(200, defaultCorsHeader)
        response.end()
      }else{
        response.writeHead(404, defaultCorsHeader)
        response.end('잘못된 요청')
      }
    });
    });
    
    server.listen(PORT, ip, () => { // listen() 메서드를 사용하여 실제로 서버를 구동할때 사용
      console.log(`http server listen on ${ip}:${PORT}`);
    });
    
    // 모든 응답때 보내줘야한다
    const defaultCorsHeader = {
      'Access-Control-Allow-Origin': '*', // * 모든 오리진의 요청을 허용한다
      'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS', // 메소드 허용
      'Access-Control-Allow-Headers': 'Content-Type, Accept', // 헤더 허용
      'Access-Control-Max-Age': 10 // preflight request는 10초까지 허용된다 
    };

    '코드스테이츠 > JavaScript' 카테고리의 다른 글

    4.10 기술면접 준비  (0) 2023.04.10
    4.6 S2U10 종합퀴즈  (0) 2023.04.07
    3.29 [HTTP/네트워크] REST API  (0) 2023.03.29
    3.28 SSR vs CSR  (0) 2023.03.28
    3.28 브라우저의 작동원리 AJAX  (0) 2023.03.28
Designed by Tistory.