15

我有非常简单的 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]

4

4 回答 4

29

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

exports.gettop = function(n){
    return function(req, res) {
        console.log(n);
        res.send(200);
    };
};
于 2013-04-14T04:01:20.423 回答
16

由于您的代码看起来像是在使用 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);
};
于 2013-04-14T08:24:39.717 回答
7

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

app.get('/api/v1/top100', routes.gettop.bind(null, 100)); 
于 2013-04-14T05:06:29.930 回答
2

尝试

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();
    };
};
于 2018-08-14T19:33:36.690 回答