Express는 Node.js를 위한 웹 프레임워크입니다. Node.js의 핵심 모듈인 HTTP와 Connect 컴포넌트를 기반으로 하며, 미들웨어라고 하는 강력한 기능을 제공합니다. Express는 웹 및 모바일 애플리케이션을 쉽고 빠르게 개발할 수 있도록 도와줍니다.
express를 이용한 HTTP요청과 응답을 처리하는 기본적인 예시입니다.
const express = require('express'); //외부에서 받아온 파일의 경우 경로가아닌 이름을 적는다
const app = express();
const port = 3000;
app.get('/', (req, res) => { //req: request, res: response
res.send('Hello World'); //'Hello world'를 응답으로 보냄
});
app.listen(port, () => {
console.log('Express listen', port);
});
npm install express
위의 명령어를 통해 터미널에서 express를 쉽게 다운로드 받을수 있다.
Node.js 기반의 애플리케이션을 개발할 때 파일의 변경을 감지하고 자동으로 노드 애플리케이션을 재시작해주는 도구입니다.
nodemon이 없이는 변경사항을 보기위해서 서버를 종료하고 파일을 수정,저장한 후에 다시 서버를 켜야하지만, nodemon을 사용함으로써 서버가 켜져있는 상태에서 파일을 수정후 저장만하면 변경사항이 적용된것을 확인할 수 있다.
npm install -g nodemon
위와 같이 -g 옵션을 사용해서 받는것이 권장하는 방법이다.
nodemon index.js
//node index.js 방식에서 node를 nodemon으로 바꿔서 실행하면 된다.
express router는 express.Router 클래스를 사용하여 모듈식으로 마운트 가능한 라우트 핸들러를 생성하는 기능입니다.
예시로, 다음 코드는 라우터를 모듈로서 작성하고, 라우터 모듈에서 미들웨어 함수를 로드하고, 몇몇 라우트를 정의하고, 기본 앱의 한 경로에 라우터 모듈을 마운트합니다12.
// birds.js
var express = require('express')
var router = express.Router()
router.use(function timeLog (req, res, next) {
console.log('Time: ', Date.now())
next()
})
router.get('/', function (req, res) {
res.send('Birds home page')
})
router.get('/about', function (req, res) {
res.send('About birds')
})
module.exports = router
// app.js
var birds = require('./birds')
// ...
app.use('/birds', birds)
express router의 장점은 다음과 같습니다:
middleware는 요청 오브젝트(req), 응답 오브젝트(res), 그리고 애플리케이션의 요청-응답 주기에서 다음 미들웨어 함수에 접근할 수 있는 함수입니다. middleware는 요청과 응답을 수정하거나 처리하고, 다음 미들웨어 함수를 호출하거나, 요청-응답 주기를 종료할 수 있습니다.
//router.js
const express = require('express');
const router = express.Router();
function testMiddleWare(req, res, next) {
console.log('미들웨어');
next(); // 다음 파라미터로
}
router.get('/', testMiddleWare, (req, res) => {
res.send('미들웨어 보다 뒤에 실행되야함');
});
module.exports = router
해당 예시처럼 함수를 만들어서 넣으면 router.get() 안에서 왼쪽 부터 차례대로 실행이된다.
예를들면 로그인이 된 사용자를 검증하고싶다면 검증해서 로그인이 안되어있으면 redirect를 시키고 되어있으면 next()를 통해 다음으로 넘길수 있다.