2017-11-30 10 views
0

여기 내 코드를 정리하는 방법을 찾고 있습니다. 이렇게 여러 경로가 있습니다. 각 경로는 개별적으로 JSON 웹 토큰 확인 프로세스를 진행합니다.Express : JSON 웹 토큰으로 여러 경로를 보호하는 방법

router.route('/some-route').post((req, res) => { 
    jwt.verify(req.body.token, secret, (err, decoded) => { 
    if (err) return console.log(err); 
    // do something 
    res.json({ some: 'response data' }); 
    }); 
}); 

router.route('/some-other-route').post((req, res) => { 
    jwt.verify(req.body.token, secret, (err, decoded) => { 
    if (err) return console.log(err); 
    // do something else 
    res.json({ some: 'response data' }); 
    }); 
}); 

다른 방법이 있습니까? 내 경로 중 일부는 중첩의 콜백 - 지옥 수준에 접근하고 있으므로 모든 경로에서이를 제거하는 것이 좋습니다.

답변

2

라우터에 use의 미들웨어 기능을 알릴 수 있는지 확인하십시오. 이 함수는 모든 경로에 대해 router에 호출됩니다.

router.use((req, res, next) => { 
    if(!req.body.token) 
    return res.json({ message: 'Missing token.' }); 

    jwt.verify(req.body.token, secret, (err, decoded) => { 
    if (err) return res.json({ message: 'Failed to authenticate token.' }); 
    // do something else 
    req.decoded = decoded 
    next(); 
    }); 
}); 
+0

"디코딩 된"매개 변수를 전달할 수 있습니까? – Alan

+1

아, 네,'next()'전에'req.decoded = decoded'를 할 수 있습니다. 나는 그것을 내 대답에 덧붙였다. –

+0

킬러! 이것은 완벽하게 작동합니다, 감사합니다! – Alan