无法在声明为static的中间件中访问mongoose模型

时间:2016-04-25 19:26:05

标签: node.js express mongoose

我有一些路线要检查参数。这样做,一切正常:

var User = require('../../models/user');
router.param('userId', existsMiddleware)
router.get('/users/:userId, doSomething);

function existsMiddleware(req, res, next, userId) {
    User
      .findById(userId)
      .exec(function(err, user) {
        var errObj = { status: 404, message: 'No user with that ID'};
        if (err) {
          res.status(errObj.status).json(errObj);
        } else {
          !!user ? next() : res.status(errObj.status).json(errObj);
        }
      });
}

我希望将它作为一个共享库移动到模型User作为静态方法。问题是在这种特定情况下我无法访问模型(this)。

让我们改写一下路线文件:

var User = require('../../models/user');
router.param('userId', User.existsMiddleware)
router.get('/users/:userId, doSomething);

在我的用户 Schema 中我有:

var user = mongoose.Schema(schemaObject);
user.statics.existsMiddleware = existsMiddleware;
module.exports = mongoose.model('User', user);

function existsMiddleware(req, res, next, userId) {
    this
      .findById(userId)
      .exec(function(err, user) {
        var errObj = { status: 404, message: 'No user with that ID'};
        if (err) {
          res.status(errObj.status).json(errObj);
        } else {
          !!user ? next() : res.status(errObj.status).json(errObj);
        }
      });
}

问题在于,在调试时,函数existsMiddleware内部评估为undefined,对于我拥有的其他静态方法,正在发生,并且也使用它。 / p>

1 个答案:

答案 0 :(得分:0)

您只需要将函数绑定到模型:

router.param('userId', User.existsMiddleware.bind(User))