ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Mini-Node Server
    codeStates front-end/node(server) 2023. 2. 8. 16:20
    ๋ฐ˜์‘ํ˜•

     

     

    ๐Ÿ“Œ Mini-Node Server

     

     

    ๐Ÿ“์„œ๋ฒ„์‹คํ–‰

     

    node server/basic-server.js

     

     

    ๐Ÿ“– ํ•™์Šต ๋ชฉํ‘œ

     

    • POST์— ๋ฌธ์ž์—ด์„ ๋‹ด์•„ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ๋Š” HTTP ๋ฉ”์‹œ์ง€์˜ body(payload)๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.
    • ์„œ๋ฒ„๋Š” ์š”์ฒญ์— ๋”ฐ๋ฅธ ์ ์ ˆํ•œ ์‘๋‹ต์„ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ณด๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • CORS ๊ด€๋ จ ํ—ค๋”๋ฅผ OPTIONS ์‘๋‹ต์— ์ ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
      • ํด๋ผ์ด์–ธํŠธ์˜ preflight request์— ๋Œ€ํ•œ ์‘๋‹ต์„ ๋Œ๋ ค์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.
      • preflight request์— ๋Œ€ํ•œ ์‘๋‹ต ํ—ค๋”๋Š” ์ด๋ฏธ ์ž‘์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

     

     

    basic.server.js

     

     

    const http = require('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'){ //๋ฉ”์†Œ๋“œ๊ฐ€ post์ด๊ณ ,ur์ด upper์ด๋ฉด ๋Œ€๋ฌธ์ž
        response.writeHead(200, defaultCorsHeader)
        response.end(body.toUpperCase())
      }else if(request.method === 'POST' && request.url === '/lower'){ // ๋ฉ”์†Œ๋“œ post์ด๊ณ , 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, () => {
      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์ดˆ๊นŒ์ง€ ํ—ˆ์šฉ๋œ๋‹ค 
    };
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

Designed by Tistory.