All Articles

제로초님 블로그 보고 Node.js 개념 익히기

image.png

제로초님 블로그를 많이 참고한 글입니다.

Middleware

요청에 대한 응답이 들어오면 그 중간에 껴서 어떠한 동작을 하라고 명령해주는 프로그램. 비선실세 같은 존재? Express.js도 middleware를 사용하는데 그 종류에는 Morgan, Compression, Session, Body-parser, Cookie-parser, Method-override, Cors, Multer 등이 있다고 함

express에서 middleware를 사용할땐 app.use(미들웨어()) 이런식으로!

Module System

module은 독립적인 하나의 소프트웨어임. 특히나 Node.js에선 파일 하나하나가 모듈로서 기능하는데, 꼭!! 이전 스크립트의 변수를 사용하겠다고 선언해야 한다.

// calc.js
fuction add(a,b) {
  return a+b;
}
module.exports = add;

React에서 export 해가는 것처럼 Node.js에선 export를 이런식으로 하는데, 이걸 적용하려면 require를 통해 변수에 담아준다.

// main.js
const add = require('./calc.js')
console.log(add(1,2))

근데 이게 좀 귀찮다 싶으면 더 간단한 방법이 있다. React에서도 비슷한 방법이 쓰이는데, 아예 변수이름 혹은 함수이름 자체를 export 되는 default 값으로 설정하는 것.

exports.add = function(a, b) {
  return a + b;
};

여기서 알아야할 점은 module.exports에 객체형으로 함수 혹은 변수들이 들어가기 때문에 exports를 쓰려면 꼭 .을 붙여서 객체의 속성값을 넣어줘야 한다.

res.send와 res.json의 차이점?

  1. res.send string형태를 전송한다..? 그래서 JSON.stringify를 꼭 써줘야 한다.
  2. res.json null이나 undefined와 같이 객체형태가 아닌 값들도 객체로 넘겨서 받을 수 있는 애?

Routing

클라이언트에서 보내는 주소에 따라 다른 처리를 하는 것. (클라이언트의 요청을 미들웨어로 분배하는 것) app.REST API('/주소'. 콜백함수) 위와 같은 형식으로 나타냄. get 외에도 post, put, delete 등이 있음. 근데 put과 delete를 사용하려면 method-override 패키지 설치해야 함

  • wild card app.get('/post/:id', () => {}); 이런식으로 콜론 적는것!

구글 검색에서의 wild card는 *표를 사용해서 단어와 단어 사이에 들어가는 키워드를 맞춰줬었는데 Node.js에서의 wild card는 동적 라우팅과 비슷하다고 보면 될것 같다!

Route paths

request가 만들어지는 end point를 정의하는 것? Route paths 는 string, string pattern, 정규식으로 이루어질 수 있다.

app.get('/', function (req, res) {
  res.send('root')
})

router method

// GET method route
app.get('/', function (req, res) {
  res.send('GET request to the homepage')
})

// POST method route
app.post('/', function (req, res) {
  res.send('POST request to the homepage')
})

기타

지난번 프로젝트에서 사용했던 server.js에서의 express

// server.js
const express = require('express');
const next = require('next');

const port = parseInt(process.env.PORT, 10) || 3000;
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const handle = app.getRequestHandler();
app.prepare().then(() => {
  const server = express();
  server.get('*', (req, res) => handle(req, res));
  server.listen(port, (err) => {
    if (err) throw err;
    // console.log(`🤘 on http://localhost:${port}`);
  });
});

Reference