0
我有一些我想檢查參數的路由。在這樣做時,一切工作正常:無法訪問聲明爲靜態的中間件中的貓鼬模型
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);
而且在我的用戶模式我:
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
,這是而不是發生其他靜態方法,我也有僱用它。
這確實工作。非常感謝!我仍然想知道爲什麼這個特定的情況下,對象'用戶'尚未綁定。 –