제로초님 블로그를 많이 참고한 글입니다.
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의 차이점?
- res.send string형태를 전송한다..? 그래서 JSON.stringify를 꼭 써줘야 한다.
- 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
- 제로초님 블로그 중 Node 모듈 시스템, 익스프레스 미들웨어와 라우팅
- Express.js 공식문서(https://expressjs.com/en/guide/routing.html)