Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么添加get参数会强制中间件执行_Javascript_Node.js_Express_Middleware - Fatal编程技术网

Javascript 为什么添加get参数会强制中间件执行

Javascript 为什么添加get参数会强制中间件执行,javascript,node.js,express,middleware,Javascript,Node.js,Express,Middleware,我有一个这样的中间件 //路由中间件以验证令牌 应用程序使用(功能(请求、恢复、下一步){ console.log(请求baseUrl); //检查令牌的标头、url参数或post参数 var token=req.body.token | | req.query.token | | | req.headers['x-access-token']; //解码令牌 如果(令牌){ //验证机密并检查exp jwt.verify(令牌,app.get('superSecret'),函数(err,de

我有一个这样的中间件

//路由中间件以验证令牌
应用程序使用(功能(请求、恢复、下一步){
console.log(请求baseUrl);
//检查令牌的标头、url参数或post参数
var token=req.body.token | | req.query.token | | | req.headers['x-access-token'];
//解码令牌
如果(令牌){
//验证机密并检查exp
jwt.verify(令牌,app.get('superSecret'),函数(err,decoded){
如果(错误){
返回res.json({
成功:错,
消息:“验证令牌失败。”
});
}否则{
//如果一切正常,请保存以请求在其他路线中使用
req.decoded=已解码;
next();
}
});
}否则{
//如果没有代币
//返回错误
返回资源状态(403)。发送({
成功:错,
消息:“未提供令牌。”
});
}

});发现问题在于调用路由的方式。谢谢你的帮助

查询参数为
?id=123
的请求与
/:id
不匹配。它应该被称为
verifyAccount/123

因为,路由
?id=123
与任何路径都不匹配。因此,最终到达
中间件
执行

位置决定参数,而不是名称。该名称仅在节点代码中用于引用参数


对于多个参数,我们将使用多个斜杠,如
verifyAccount/:id/:otherParameter
,使用
verifyAccount/123/234

调用这些斜杠。我设置了一个非常基本的示例(仅为每个路由和中间件提供console.log输出)。我可以看出中间件从未被调用过。只有当请求“滴落”到它的未知路径时,才会调用它。你的代码肯定出了什么问题。啊,这是你的错误。查询参数为
?id=123
的请求与
/:id
不匹配。它应该是
verifyAccount/123
instead@devnull69如果我的参数名是
p1
,那么我将如何调用它?相同。位置决定参数,而不是名称。该名称仅在节点代码中用于引用参数您将有多个斜杠,如
verifyAccount/:id/:otherParameter
,使用
verifyAccount/123/234