2016-04-25 37 views
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,這是而不是發生其他靜態方法,我也有僱用它。

回答

0

你只需要功能綁定到模型:

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

這確實工作。非常感謝!我仍然想知道爲什麼這個特定的情況下,對象'用戶'尚未綁定。 –