Expressjs - 文件分离和传递参数

时间:2014-12-23 15:36:24

标签: node.js express

一个关于我似乎无法正常工作的简单问题......

我在一个名为limiter.js的单独文件中处理我的API的基本速率限制器。我希望每个调用都能通过限制器运行,因此我将其包含在server.js文件中。

我正在使用Redis存储请求,所以我也需要传递redis的引用。

//server.js
var limiter = require('./limiter')(app,redisClient);
app.use(limiter.check());

如何将reqres提供给文件。

在我的limiter.js文件中,我有:

module.exports = function (app, redisClient) {
  var limiter = {};

  limiter.check = function (req, res) {
    console.log(req) //ERROR: req object does not exist
    var ts = moment().unix();
    var ip = req.connection.remoteAddress;
    var key = ip + ":" + ts;
    ...
  };

  return limiter;
};

req对象不存在

2 个答案:

答案 0 :(得分:4)

app.use方法需要一种方法,但您尝试调用limiter.check并传递结果。放下额外的parens它应该工作。

答案 1 :(得分:3)

您需要传递对方法的引用,而不是调用它。

app.use(limiter.check);

如果您想继续使用它,那么您需要返回一个函数。

limiter.check = function () {
  return function(req, res, next) {
    var ts = moment().unix();
    var ip = req.connection.remoteAddress;
    var key = ip + ":" + ts;
    ...
    next();
  }
};

PS:不要忘记拨打next(),否则它将无法通过您的中间件堆栈继续进行并将挂起。