티스토리 뷰
Express는 nodejs http 모듈에 추가 기능을 부여한 웹 서버 프레임워크다. 기능이 많지 않고 라우팅과 미들웨어 관리, 호출 정도만 해준다.
설치하기
npm으로 express 패키지를 설치해보자. 아래와 같은 명령어를 입력하면 설치된다.
$ npm install express --save
express로 간단한 예제를 만들어보자.
const express = require('express')
const app = express()
const port = 5000
// 라우트 메소드
app.get('/', function(req, res) {
res.send('Express Test')
})
// 요청 받기 시작
app.listen(port, () => console.log(`listen on ${port}`))
위와 같이 같단한 예제만으로 요청 처리를 할 수 있다. 위 예제는 5000번 포트에서 '/' 경로로 접근할 때 'Express Test'라는 메시지를 내려주는 간단한 서버다.
라우팅
Express로 원하는 URL에서 요청을 처리하기 위해서는 라우트 메서드를 작성해야 한다. 라우트 메서드의 포멧은 아래와 같다.
app.HTTP_METHOD(path, function(req, res) {
// 요청 처리
})
위 코드에서 HTTP_METHOD는 get, post, put, delete 같은 http 요청 메서드를 말한다. path는 요청을 받을 경로이고, 그 뒤에 나오는 함수가 요청에 대한 핸들러이다. 핸들러의 req는 요청 오브젝트, res는 응답 오브젝트이다. 이 오브젝트들이 제공하는 메서드를 확인하고 싶다면 아래 링크를 참고하자.
라우팅 path는 단순 문자열이 아니라 문자열 패턴이나 정규식도 된다. Express는 라우팅 경로를 매칭하기 위해 path-to-regexp 패키지를 사용한다. 자세한 내용은 아래 링크를 참고하자. 예를 들어 아래와 같은 경로의 라우팅도 가능하다.
// '/test', '/test123' 매칭
app.get('/test(123)?', function(req, res) {
res.send('Test 123')
})
// '.test'로 끝나는 경로 매칭
app.get(/.*\.test/, function(req, res) {
res.send('Regex Test')
})
라우트의 핸들러는 하나 이상 등록 가능하다. 지금까지 예제에서는 하나의 핸들러만 등록했지만, 아래의 코드와 같이 여러개의 핸들러도 등록이 가능하다.
app.get('/handler', function(req, res, next) {
console.log('Handler1')
next()
}, function(req, res) {
console.log('Handler2')
res.send('Handlers')
})
위 예제에서 next라는 함수는 다음 핸들러로 제어를 넘기는 함수이다. 이 함수를 꼭 실행시켜야 다음 핸들러로 넘어간다. 여러개의 핸들러는 아래처럼 배열로 넘길수도 있다.
const handler1 = (req, res, next) => {
console.log('Handler1')
next()
}
const handler2 = (req, res) => {
console.log('Handler2')
res.send('Handlers')
}
app.get('/handler', [handler1, handler2])
미들웨어
미들웨어는 요청과 응답사이에서 실행되는 코드를 말한다. 사용자 인증 처리, 쿠키 처리, 에러 처리 등을 할 수 있다. 미들웨어는 아래와 같이 정의할 수 있다.
// 모든 요청에 대한 미들웨어
app.use(function (req, res, next) {
console.log('Middleware1')
next()
})
위 코드는 모든 요청에 대해서 'Middleware1'이라는 문자열을 터미널에 남기는 미들웨어다. 보면 알겠지만 라우트 메서드와 상당히 유사한데, 라우트 메서드도 미들웨어의 종류 중 하나이다. 미들웨어의 종류는 아래와 같다.
Application
애플리케이션에 요청이 발생되면 실행되는 미들웨어다.
Router
라우터에 대한 요청이 발생하면 실행되는 미들웨어다. express의 라우터 모듈은 아래에서 설명하겠다.
var app = express();
var router = express.Router();
router.use(function (req, res, next) {
console.log('Router Middleware');
next();
});
Error
에러에 대한 처리를 하는 미들웨어다. 다른 미들웨어와 다르게 4개의 인자가 필요하다. 다른 미들웨어보다 뒤에 정의돼야한다는 것을 기억하자.
app.use(function(err, req, res, next) {
res.send(`Error: ${err.message}`)
})
이 때 알아둬야 할 것이 next 함수에 인자를 넣지 않으면 경로에 일치하는 다음 미들웨어가 호출되지만, 인자를 넣으면 에러 핸들러가 호출된다는 것이다. 이를 이용해서 조건별 제어를 할 수 있다.
// '/error-test?text=error' 호출 시 에러 발생
app.get('/error-test', function(req, res, next) {
const text = req.query.text
if (!text || text === 'error') {
next(new Error('Text Error'))
}
next()
})
app.get('/error-test', function(req, res) {
res.send(req.query.text)
})
Basic
정적 자원을 처리하는데 사용되는 미들웨어다. 정적 자원의 디렉토리를 명시할 수 있다.
app.use(express.static('public'));
Third-Party
Express에서 공식적으로 지원하는 미들웨어다. 쿠키, 세션에 대한 미들웨어, CORS 처리를 위한 미들웨어 등이 있다. Express 미들웨어 목록을 확인하고 싶다면 아래 링크를 참고하자.
참고
Express 요청 오브젝트
https://expressjs.com/ko/4x/api.html#req
Express 응답 오브젝트
https://expressjs.com/ko/4x/api.html#res
path-to-regexp
https://www.npmjs.com/package/path-to-regexp
Express Third-Party Middleware
http://expressjs.com/ko/resources/middleware.html
- Total
- Today
- Yesterday
- Linux
- nodejs
- Closure
- Tasklet
- @Qualifier
- unity
- MySQL
- @Autowired
- thymeleaf 변수 인식
- mybatis
- spring batch
- spring
- Check point within polygon
- @Bean
- Express
- JavaScript
- chunk
- Bean
- 클로저
- @Component
- thymeleaf cannot resolve
- Bin
- Barycentric coordinates
- npm
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |