Nodejs middleware: Express
Express
Express는 NodeJS Webapplication framework이다.
Install express
Express는 크게 express 모듈과 CLI 모듈로 구성되어 있다.
- express-generator: Express 프로젝트 및 템플릿 생성
- exporess module: Node.js module
expres 명령을 이용해서 프로젝트를 생성하는 모듈로서 글로벌로 설치합니다.
1 | $ mkdir myapp |
npm의 package.json 를 초기화하자.
1 | $ npm init |
entry point:
에 app.js 혹은 index.js 시작점을 선언한다.
그리고 현재 프로젝트에 express 모듈을 설치하고 package.json에 의존성을 추가해 준다.
npm 5.0+ 이상은 npm install
시 모듈을 의존성 목록에 자동으로 추가한다.
1 | $ npm install express |
이전 버전은 아래같인 --save
를 명시해야 한다.
1 | $ npm install express --save |
Express Generator
express-generator 모듈은 손쉽게 프로젝트를 구성할 수 있게 해준다. CLI 명령으로 글로벌로 설치해 준다.
1 | $ npm i -g express-generator |
pug 뷰 엔진을 가진 myapp 이란 프로젝트를 생성하려면
1 | $ express --view=pug myapp |
프로젝트로 이동해 모듈을 설치하고 시작한다.
1 | $ cd myapp && npm install |
MacOS or Linux 에서 디버그 모드로 시작한다.
1 | $ DEBUG=myapp:* npm start |
Windows 에서
1 | > set DEBUG=myapp:* & npm start |
debug module
https://developer.ibm.com/node/2016/10/12/the-node-js-debug-module-advanced-usage/
https://expressjs.com/en/guide/writing-middleware.html
ExpressJS Middlewares
morgan:
loggerbody-parser:
parse the body so you can access parameters in requests in req.body. e.g. req.body.name.cookie-parser:
parse the cookies so you can access parameters in cookies req.cookies. e.g. req.cookies.name.serve-favicon:
exactly that, serve favicon from route /favicon.ico. Should be call on the top before any other routing/middleware takes place to avoids unnecessary parsing.
주요 미들웨어
The following middlewares are not added by default, but it’s nice to know they exist at least:
compression:
compress all request. e.g.app.use(compression())
session:
create sessions. e.g.app.use(session({secret: 'Secr3t'}))
method-override:
app.use(methodOverride('_method'))
Override methods to the one specified on the _method param. e.g.GET /resource/1?_method=DELETE will become DELETE /resource/1
.response-time: app.use(responseTime()) adds X-Response-Time header to responses.
errorhandler:
Aid development, by sending full error stack traces to the client when an error occurs. app.use(errorhandler()). It is good practice to surround it with an if statement to check process.env.NODE_ENV === ‘development’.vhost:
Allows you to use different stack of middlewares depending on the request hostname. e.g. app.use(vhost(‘.user.local’, userapp)) and app.use(vhost(‘assets-.example.com’, staticapp)) where userapp and staticapp are different express instances with different middlewares.csurf:
Adds a Cross-site request forgery (CSRF) protection by adding a token to responds either via session or cookie-parser middleware. app.use(csrf());timeout:
halt execution if it takes more that a given time. e.g. app.use(timeout(‘5s’));. However you need to check by yourself under every request with a middleware that checks if (!req.timedout) next();.
Nodejs middleware: Express