【发布时间】:2019-03-09 22:15:28
【问题描述】:
// state edit route
app.get("/map/:symbol/edit", isLoggedIn, function(req, res){
State.findOne({symbol: req.params.symbol}, function(err, state){
if(err){
console.log(err);
} else
{
res.render("edit", {state: state});
}
});
});
在上面的代码sn-p中,isLoggedIn是检查认证的中间件函数。其定义如下:
// middleware function
function isLoggedIn(req, res, next){
if(req.isAuthenticated()){
return next();
}
res.redirect("/admin");
}
那么,问题来了,如何将字符串、整数或路径变量等参数传递给中间件函数,以便在路由 url 中使用?
【问题讨论】:
-
从哪里传?中间件将始终在您的终止函数之前运行,并且中间件的运行顺序与您在 app.get() 等中定义它们的顺序相同。
-
我想要 isLoggedIn(var) 这样我就可以访问函数中的 var(req, res, next, var){} @LarsHoldaas
-
很公平,但是你如何想象你将要调用 isLoggedIn?您永远不会自己调用它,而是 express 调用它以及中间件/终止函数链中的所有其他函数,并使用相同的三个参数:req、res 和 next。
-
现在,如果您的想法是要根据调用的 app.get/app.post 等进行不同的操作,您可以检查中间件中的 req.originalUrl。除此之外,您从未真正从代码中调用该函数。 Express 在收到请求时会为您执行此操作。
-
我建议您准确描述您想要的行为,我或其他人会为您提供如何实现该行为的好建议。但您具体要求的不是 express 的工作方式。
标签: javascript node.js express routes