Node.js将变量传递给路由

use*_*182 14 node.js express

我有一个非常简单的node.js noob问题.如何将变量传递给导出的路径函数?

路由文件

exports.gettop = function(n, req, res) {
  console.log(n);
  res.send(200);
};
Run Code Online (Sandbox Code Playgroud)

服务器文件

app.get('/api/v1/top100', routes.gettop(100)); 
Run Code Online (Sandbox Code Playgroud)

错误:.get()需要回调函数但得到[对象未定义]

log*_*yth 25

对于您的示例,您希望创建一个将近似值的新函数n.在您的情况下,您正在执行gettop并传递返回的值以表示您的路由,这意味着gettop需要返回路由处理程序.

exports.gettop = function(n){
    return function(req, res) {
        console.log(n);
        res.send(200);
    };
};
Run Code Online (Sandbox Code Playgroud)


sai*_*ama 14

由于您的代码看起来像是使用快递,因此您可以使用快速应用本地和表达结果本地来将变量传递到您的路线.虽然其他答案提出了工作解决方案,但我认为使用表达机制来设置这些变量并不那么突兀.

使用响应本地(请参阅Express API参考),您首先必须在中间件或路由中的某处设置变量.我将展示中间件方法

app.use(function(req,res, next) {
  res.locals.top = 200;
  next();
});
Run Code Online (Sandbox Code Playgroud)

然后在您的路线中,您可以通过res.locals.variablename访问此属性

exports.gettop = function(req, res) {
  console.log(res.locals.top);
  res.send(200);
};
Run Code Online (Sandbox Code Playgroud)

如果您想在应用程序范围内进行这些设置,更好的方法是使用应用程序本地(请参阅Express API参考)

要设置应用本地变量,您可以使用

app.locals.top = 100;
Run Code Online (Sandbox Code Playgroud)

要从您的路线使用中访问此变量

exports.gettop = function(req, res){
  console.log(req.app.locals.top);
  res.send(200);
};
Run Code Online (Sandbox Code Playgroud)


rob*_*lep 7

作为loganfsmyth(非常有效!)解决方案的替代方案,您可以gettop按原样保留函数并创建部分函数:

app.get('/api/v1/top100', routes.gettop.bind(null, 100)); 
Run Code Online (Sandbox Code Playgroud)