我有非常简单的 node.js noob 问题。如何将变量传递给导出的路由函数?
路由文件
exports.gettop = function(n, req, res) {
console.log(n);
res.send(200);
};
服务器文件
app.get('/api/v1/top100', routes.gettop(100));
错误:.get() 需要回调函数,但得到了 [object Undefined]
对于您的示例,您希望创建一个新函数,该函数将围绕您的n
. 在您的情况下,您正在执行gettop
并传递返回值以表示您的路由,这意味着gettop
需要返回路由处理程序。
exports.gettop = function(n){
return function(req, res) {
console.log(n);
res.send(200);
};
};
由于您的代码看起来像是在使用 express,您可以使用 express app locals 和 express result locals 将变量传递给您的路由。虽然其他答案提出了可行的解决方案,但我认为使用快速机制来设置这些变量并不那么突兀。
使用响应本地变量(请参阅 Express API 参考),您首先必须在中间件或路由中的某处设置一个变量。我将展示中间件方法
app.use(function(req,res, next) {
res.locals.top = 200;
next();
});
然后在您的路线中,您可以通过 res.locals.variablename 访问此属性
exports.gettop = function(req, res) {
console.log(res.locals.top);
res.send(200);
};
如果您想在应用程序范围内进行这些设置,更好的方法是使用应用程序本地(请参阅 Express API 参考)
要设置应用程序本地变量,您可以使用
app.locals.top = 100;
要从您的路线访问此变量,请使用
exports.gettop = function(req, res){
console.log(req.app.locals.top);
res.send(200);
};
作为 loganfsmyth 的(非常有效的!)解决方案的替代方案,您可以将gettop
函数保持原样并创建一个部分函数:
app.get('/api/v1/top100', routes.gettop.bind(null, 100));
尝试
app.post('/find_user',
require('./naas/autentication'),
require('./naas/authorization')(paramForRouter),
require('./routes/users'));
在哪里
require('./naas/autentication') 例如
module.exports = function (req, res, next) {next();}
并且 require('./naas/authorization')(paramForRouter) 是
module.exports = function (paramForRouter) {
return function (req, res, next) {
this.param = paramForRouter;
console.log("Param value",this.param);
next();
};
};