Express
는 최소한의 기능을 가지고 있는 라우팅과 미들웨어 웹
프레임워크입니다. Express
는 일련의 미들웨어 함수를 실행하는
어플리케션입니다.req
)와 response object(res
)에 접근할 수
있고 다음 미들웨어 함수를 실행도록 next
를 실행할 수 있습니다.request-response
사이클을 끝낼 수 있습니다.next()
를 호출해야합니다. 응답을 끝내지 않은채로 남아있을 수 있습니다.app.use()
함수와 app.METHOD
함수를 이용하여 할당할 수 있습니다.var app = express()
app.use(function (req, res, next) {
console.log('Time:', Date.now())
next()
})
/user/:id
에 요청할 때 마다 실행되는 미들웨어
함수입니다.app.use('/user/:id', function (req, res, next) {
console.log('Request Type:', req.method)
next()
})
/user/:id로
로 요청했을 때 실행되는 핸들러 함수입니다.app.get('/user/:id', function (req, res, next) {
res.send('USER')
})
/user/:id
로 요청할 떄 마다
실행되는 미들웨어함수들입니다.app.use('/user/:id', function (req, res, next) {
console.log('Request URL:', req.originalUrl)
next()
}, function (req, res, next) {
console.log('Request Type:', req.method)
next()
})
request-response
사이클을 끝내기
때문입니다.app.get('/user/:id', function (req, res, next) {
console.log('ID:', req.params.id)
next()
}, function (req, res, next) {
res.send('User Info')
})
// handler for the /user/:id path, which prints the user ID
app.get('/user/:id', function (req, res, next) {
res.end(req.params.id)
})
next('route')
함수를 호출하면됩니다.next('route')
는 app.METHOD()
나 router.METHOD()
를 통해 로드된
미들웨어에서만 동작합니다.app.get('/user/:id', function (req, res, next) {
// if the user ID is 0, skip to the next route
if (req.params.id === '0') next('route')
// otherwise pass the control to the next middleware function in this stack
else next()
}, function (req, res, next) {
// send a regular response
res.send('regular')
})
// handler for the /user/:id path, which sends a special response
app.get('/user/:id', function (req, res, next) {
res.send('special')
})
express.Router()
를 사용한다는것을 제외하면 라우터레벨 미들웨어는
어플리케이션 레벨 미들웨어와 똑같이 동작합니다.router.user()
와 router.METHOD()
를 사용하여 미들웨어를 로드할 수 있습니다.var app = express()
var router = express.Router()
// a middleware function with no mount path. This code is executed for every request to the router
router.use(function (req, res, next) {
console.log('Time:', Date.now())
next()
})
// a middleware sub-stack shows request info for any type of HTTP request to the /user/:id path
router.use('/user/:id', function (req, res, next) {
console.log('Request URL:', req.originalUrl)
next()
}, function (req, res, next) {
console.log('Request Type:', req.method)
next()
})
// a middleware sub-stack that handles GET requests to the /user/:id path
router.get('/user/:id', function (req, res, next) {
// if the user ID is 0, skip to the next router
if (req.params.id === '0') next('route')
// otherwise pass control to the next middleware function in this stack
else next()
}, function (req, res, next) {
// render a regular page
res.render('regular')
})
// handler for the /user/:id path, which renders a special page
router.get('/user/:id', function (req, res, next) {
console.log(req.params.id)
res.render('special')
})
// mount the router on the app
app.use('/', router)
next('router')
를 호출하면 됩니다.var app = express()
var router = express.Router()
// predicate the router with a check and bail out when needed
router.use(function (req, res, next) {
if (!req.headers['x-auth']) return next('router')
next()
})
router.get('/', function (req, res) {
res.send('hello, user!')
})
// use the router and 401 anything falling through
app.use('/admin', router, function (req, res) {
res.sendStatus(401)
})
app.use(function (err, req, res, next) {
console.error(err.stack)
res.status(500).send('Something broke!')
})
Express
앱에서 다양한 기능들을 추가하기위해 써드파티 미들웨어를 사용할 수
있습니다.$ npm install cookie-parser
var express = require('express')
var app = express()
var cookieParser = require('cookie-parser')
// load the cookie-parsing middleware
app.use(cookieParser())
자바스크립트로 직접 만들면서 배우는 - 자료구조와 알고리즘 강의 바로 가기
실습으로 마스터하는 OAuth 2.0: 기본부터 보안 위험까지 - OAuth 2.0 강의 바로 가기
기계인간 이종립, 소프트웨어 개발의 지혜 - Git 강의 바로 가기
코드숨에서 매주 스터디를 진행하고 있습니다. 메일을 등록하시면 새로운 스터디가 시작될 때 알려드릴게요!