我有一些路线要检查参数。这样做,一切正常:
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>
答案 0 :(得分:0)
您只需要将函数绑定到模型:
router.param('userId', User.existsMiddleware.bind(User))