0
私はパラメータをチェックしたいいくつかのルートを持っています。これを実行すると、すべてが正常に動作します:それは静的メソッドとしてモデルUser
に、共有ライブラリであるとして静的として宣言されたミドルウェアの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);
}
});
}
私は便宜のために、それを移動したいと思います。問題は、この特定のケースでモデル(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
に評価されていることで、 ではない私が持っている他の静的メソッドのために起きているし、それを採用しています。
を。どうもありがとう!私はまだこの特定のケースでは、オブジェクト 'User'がなぜ縛られていないのだろうと思っています。 –