我的主文件称为index.js,在其中加载一些内容,然后跳转到不同文件中的路由。现在我的问题是,我有几个类似app.use的部分,用于检查有效令牌。
app.use(function(req, res, next) {
// check header or url parameters or post parameters for token
var token = req.body.token || req.query.token || req.headers['x-access-token'];
// decode token
if (token) {
console.log('MyToken:'+token)
// verifies secret and checks exp
jwt.verify(token, 'MySuperSecret', function(err, decoded) {
if (err) {
if (err.name === 'TokenExpiredError')
{
return res.status(401).send({ success: false, error: err.name, message: err.message, expiredAt: err.expiredAt })
}
else{
return res.send({ success: false, message: 'Failed to authenticate token.' });
}
} else {
// if everything is good, save to request for use in other routes
console.log('success')
req.decoded = decoded;
res.locals.decoded = decoded;
next();
}
});
} else {
// if there is no token
// return an error
return res.status(403).send({
success: false,
message: 'No token provided.'
});
}
})
我的问题是在声明任何单独的路由之前,是否将这个app.use函数放置在index.js中
app.use('/api', apiRoutes);
代码仍然会命中并使用app.use函数,还是我必须将app.use函数放在每个路由文件的顶部,以保护下面的路由。 尝试找出最好的方法是,如果一个路由文件多于一个。
答案 0 :(得分:0)
您可以通过指定正则表达式来应用中间件。也许app.use('/api.*', myMiddleware)
会有所帮助。
否则,您可以尝试一下,看看是否可行。