我有一个像这样的中间件
// route middleware to verify a token
app.use(function(req, res, next) {
console.log(req.baseUrl);
// 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) {
// verifies secret and checks exp
jwt.verify(token, app.get('superSecret'), function(err, decoded) {
if (err) {
return res.json({
success: false,
message: 'Failed to authenticate token.'
});
} else {
// if everything is good, save to request for use in other routes
req.decoded = decoded;
next();
}
});
} else {
// if there is no token
// return an error
return res.status(403).send({
success: false,
message: 'No token provided.'
});
}
});
此路线 http://localhost:8080/verifyAccount 未作为No token provided
app.get('/verifyAccount', function (req, res) {
res.json({ message: 'Welcome to verify account!' });
});
但是以下路线 http://localhost:8080/verifyAccount?id=123 可以:
app.get('/verifyAccount/:id', function (req, res) {
res.json({ message: 'Welcome to verify account!' });
});
中间件代码位于代码文件的底部,get路径位于上方
背后的概念是什么?
为什么添加get参数会强制中间件执行?
刚刚发现,如果我将其称为 http://localhost:8080/verifyAccount/id=123 ,则会正确返回Welcome to verify account!
答案 0 :(得分:0)
发现问题在于路由被调用的方式。感谢Thomas Theiner的帮助。
查询参数?id=123
的请求与/:id
不匹配。它应该被称为verifyAccount/123
。
因为,路线
?id=123
与任何路径都不匹配。因此,最终到达middleware
执行
位置确定参数,而不是名称。该名称仅在节点代码中用于引用参数。
对于多个参数,我们会有verifyAccount/:id/:otherParameter
之类的多个斜杠,可以使用verifyAccount/123/234
调用