NodeJS 4강 : express middleware
======================================================================
미들웨어(Middleware)
Spring의 Handshake, interceptor, AOP를 사용해보신 분이라면 이해하기가 쉽습니다.
express의 미들웨어는 요청이 왔을 경우 중간에서 각종 서비스 처리를 해주는 역할을 합니다.
간단하게 말하면 자판기에 동전을 넣었을때 이 동전이 얼마짜리 동전인지 확인을 해준다는 거죠.
이 미들웨어는 클라이언트가 어떤 요청을 했을때 특정한 URL에서 특정한 데이터를 캐치해서 처리가 가능합니다.
app.js component class method
middleware(app) {
app.use('/node', function(req, res, next) {
var nodeman = req.query.nodeman;
console.log(nodeman);
next();
});
}
/node라는 URL에 접근했을때 GET방식으로 보낸 쿼리스트링 nodeman을 감지하고 그 값을 콘솔에 찍어봤습니다.
http://localhost:3000/node?nodeman=node
위의 URL로 요청을하면 node라는 값이 찍힐겁니다.
미들웨어 예외처리
예외처리하면 try/catch를 생각하시겠죠. 물론 NodeJS에서도 try/catch가 쓰입니다.
하지만 많은 try/catch문이 생기면 코드를 보는거 자체가 어지럽고 잘못하면 try/catch 지옥에 빠지겠죠...
express middleware에서는 이를 쉽게 처리를 할 수 있습니다.
app.js
console.time('Server ON Time2');
import express from 'express';
const app = express();
class component {
constructor(port, ip, route) {
this.port = port;
this.ip = ip;
this.route = route;
}
middleware(app) {
app.use('/node', function(req, res, next) {
var nodeman = Number(req.query.nodeman);
console.log(nodeman);
if(isNaN(nodeman)) {
console.log('NaNcheck');
next('isNaN detecting');
} else {
next();
}
});
}
errorhandle(app) {
app.use(function(err, req, res, next) {
res.send('Error Handle ' + err);
})
}
routing(app) {
for(var i = 0; i < this.route.path.length; i++) {
app.get(this.route.path[i], function(req, res) {
res.send('nodeman');
});
}
}
listen(app) {
app.listen(this.port, this.ip, () => {
console.timeEnd('Server ON Time2');
});
}
}
const server = new component(3000, '127.0.0.1', { path: ['/', '/node'] });
server.middleware(app);
server.routing(app);
server.errorhandle(app);
server.listen(app);
next() 메서드를 이용해서 에러메세지를 던져주면 에러 핸들러가 잡아줍니다.
next() 메서드 말고 throws로 직접 예외를 던지는 방법도 있습니다.
> 4강을 마치며
저는 Spring 백엔드 개발할때 제일 생각을 많이 해야하던 부분이 예외처리 였는데요.
하지만 지금와서 생각해보면 너무 많이 생각을 했던거 같네요. 오류가 나는 상황을 예측하고
대응하는 패턴을 만들어서 그 패턴 데이터를 클라이언트 한테 주고 클라이언트에서 처리하면 쉽거든요...
예외처리 기법은 사람마다 다를겁니다. 저는 제가 개발 하면서 단점들을 보완하면서 최대한 알려드리고싶네요.
GitHub URL : https://github.com/BlackPing/node
'NodeJS' 카테고리의 다른 글
NodeJS 6강 : 정적파일, 화면처리 (0) | 2019.10.25 |
---|---|
NodeJS 5강 : MySql 연동 (0) | 2019.10.23 |
NodeJS 3강 : Babel7, nodemon (0) | 2019.10.21 |
NodeJS 2강 : express 시작하기 (0) | 2019.10.21 |
NodeJS 1강 : 개발환경 구성 (0) | 2019.10.20 |
댓글