ν™˜ν…Œν¬ 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μ΄ˆκΉŒμ§€ ν—ˆμš©λœλ‹€ 
};
λ°˜μ‘ν˜•