Node.js将变量传递给路由

时间:2013-04-14 03:28:34

标签: node.js express

我有一个非常简单的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 个答案:

答案 0 :(得分:25)

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

exports.gettop = function(n){
    return function(req, res) {
        console.log(n);
        res.send(200);
    };
};

答案 1 :(得分:14)

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

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

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);
};

如果您想在应用程序范围内进行这些设置,更好的方法是使用应用本地人(See Express API reference

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

app.locals.top = 100;

要从路线使用

访问此变量
exports.gettop = function(req, res){
  console.log(req.app.locals.top);
  res.send(200);
};

答案 2 :(得分:7)

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

app.get('/api/v1/top100', routes.gettop.bind(null, 100)); 

答案 3 :(得分:1)

尝试

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();
    };
};