본문 바로가기
NodeJS

NodeJS 4강 : express middleware

by NodeMan 2019. 10. 23.

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

댓글