Skip to content

Latest commit

 

History

History
146 lines (110 loc) · 3.98 KB

File metadata and controls

146 lines (110 loc) · 3.98 KB

Module

1. Core Modules

  • http - 서버를 시작하거나 구글 맵 API 처럼 API 요청을 보낼 수 도 있다.
  • https - SSL 서버 시작
  • fs - 파일 시스템
  • path - 파일 경로 가져오기
  • os - OS 정보 가져오기

cf)

const http = require('http'); // Global 모듈 가져오기
const http = require('./http'); // 로컬 폴더에서 가져오기 

2. Request & Response

노드는 이벤트 기반으로 작동한다. 따라서 요청이 들어오면 서버가 응답하는 함수를 작성 할 수 있다.

  • 요청을 보내면 서버에서 응답을 준다.

Response 설정하기

const http = require('http');

const server = http.createServer((req, res)=>{ // 요청이 오면 실행하는 이벤트 리스너
    console.log(req.url, req.method, req.headers);
    res.setHeader('Content-Type', 'text/html')
    res.write('<html>')
    res.write('<head><title>My Firlst Page</title></head>')
    res.write('<body><h1>Hi</h1></body>')
    res.write('</html>')
    res.end();
});

server.listen(3000);

3. 라우팅 요청

  • 클라이언트가 보낸 url 요청을 받고 응답을 보낸다.
const http = require('http');

const server = http.createServer((req, res)=>{ // 요청이 오면 실행하는 이벤트 리스너
    const url = req.url; // 사용자가 요청한 url
    if (url === '/') {
        res.write('<html>')
        res.write('<head><title>Enter Message</title></head>')
        res.write('<body><form action="/message" method="POST"><input type="text" name="message"><button type="submint">Send</botton></h1></form>')
        res.write('</html>')
        return res.end(); // 함수 종료

    }
    res.setHeader('Content-Type', 'text/html')
    res.write('<html>')
    res.write('<head><title>My Firlst Page</title></head>')
    res.write('<body><h1>Hi</h1></body>')
    res.write('</html>')
    res.end();
});

server.listen(3000);

4. 요청 리다이렉션

const http = require('http');
const fs = require('fs');

const server = http.createServer((req, res) => {
  // 요청이 오면 실행하는 이벤트 리스너
  const url = req.url; // 사용자가 요청한 url
  const method = req.method;
  if (url === '/') {
    res.write('<html>');
    res.write('<head><title>Enter Message</title></head>');
    res.write(
      '<body><form action="/message" method="POST"><input type="text" name="message"><button type="submint">Send</botton></h1></form>'
    );
    res.write('</html>');
    return res.end(); // 함수 종료
  }

  if (url === '/message' && method === 'POST') { // redirection code
    fs.writeFileSync('message.txt', 'DUMMY');
    res.statusCode = 302;
    res.setHeader('Location', '/');
    return res.end();
  }
  res.setHeader('Content-Type', 'text/html');
  res.write('<html>');
  res.write('<head><title>My Firlst Page</title></head>');
  res.write('<body><h1>Hi</h1></body>');
  res.write('</html>');
  res.end();
});

server.listen(3000);

5. Parse Request Body

노드는 request를 받을 때 그 안에는 몇개의 청크로 이루어져있다. Node.js 가 작업할 때는 모든 청크가 오기를 기다리지 않는다. 우선 데이터가 오면 버퍼에 넣고 사용한다.

  if (url === '/message' && method === 'POST') {
    const body = [];
    req.on('data', chunk => { // req.on은 버퍼에서 데이터 조각이 전송 될 때마다 실행
      console.log(chunk);
      body.push(chunk);
    });
    req.on('end', () => {
      const parsedBody = Buffer.concat(body).toString();
      const message = parsedBody.split('=')[1];
      fs.writeFileSync('message.txt', message);
    });
    fs.writeFileSync('message.txt', 'DUMMY');
    res.statusCode = 302;
    res.setHeader('Location', '/');
    return res.end();
  }
  res.setHeader('Content-Type', 'text/html');
  res.write('<html>');
  res.write('<head><title>My Firlst Page</title></head>');
  res.write('<body><h1>Hi</h1></body>');
  res.write('</html>');
  res.end();
});