Mongoose schematype.castForQuery错误。 用户身份validation失败

我使用护照战略使用本地护照使用节点js和mongoose时遇到问题。 有时(并不总是),它显示以下错误,我无法弄清楚,我无法login到系统。 我已经使用angularJS的客户端。

TypeError: schematype.castForQuery is not a function at cast (/Users/Harry/Desktop/socketio/node_modules/mongoose/lib/cast.js:229:32) at Query.cast (/Users/Harry/Desktop/socketio/node_modules/mongoose/lib/query.js:2753:12) at Query.findOne (/Users/Harry/Desktop/socketio/node_modules/mongoose/lib/query.js:1353:10) at Function.findOne (/Users/Harry/Desktop/socketio/node_modules/mongoose/lib/model.js:1343:13) at Strategy._verify (/Users/Harry/Desktop/socketio/app_api/config/passport.js:17:8) at Strategy.authenticate (/Users/Harry/Desktop/socketio/node_modules/passport-local/lib/strategy.js:90:12) at attempt (/Users/Harry/Desktop/socketio/node_modules/passport/lib/middleware/authenticate.js:348:16) at authenticate (/Users/Harry/Desktop/socketio/node_modules/passport/lib/middleware/authenticate.js:349:7) at module.exports.login (/Users/Harry/Desktop/socketio/app_api/controllers/authentication.js:302:4) at Layer.handle [as handle_request] (/Users/Harry/Desktop/socketio/node_modules/express/lib/router/layer.js:95:5) at next (/Users/Harry/Desktop/socketio/node_modules/express/lib/router/route.js:131:13) at Route.dispatch (/Users/Harry/Desktop/socketio/node_modules/express/lib/router/route.js:112:3) at Layer.handle [as handle_request] (/Users/Harry/Desktop/socketio/node_modules/express/lib/router/layer.js:95:5) at /Users/Harry/Desktop/socketio/node_modules/express/lib/router/index.js:277:22 at Function.process_params (/Users/Harry/Desktop/socketio/node_modules/express/lib/router/index.js:330:12) at next (/Users/Harry/Desktop/socketio/node_modules/express/lib/router/index.js:271:10) 

这里是我的错误指向的代码:我试图login,但它有时(不总是)说上述错误。我找不到错误。

 module.exports.login = function(req, res) { if (!req.body.email || !req.body.password) { sendJSONresponse(res, 400, { "message": "All fields Required." }); return; } passport.authenticate('local', function(err, user, info) { var token; if (err) { sendJSONresponse(res, 400, err); return; } // console.log('user detail : '+user); if (user && user.verified === true) { token = user.generateJwt(); sendJSONresponse(res, 200, { "token": token }); } else { sendJSONresponse(res, 401, info); } })(req, res); // make sure that req, res are available to the passport }; 

这里是护照战略的代码:

 passport.use(new LocalStrategy({ usernameField: 'email' }, function(username, password, done) { User.findOne({ email: username }, function(err, user) { if (err) { console.log("passport_error : "+err); return done(err); } if (!user) { return done(null, false, { "message": "Incorrect Username." }); } if (!user.validPassword(password)) { return done(null, false, { "message": "Incorrect Password." + password }); } console.log(user); return done(null, user); }); } )); 

我find了解决我的问题。 现在起作用了。 我用Object.prototype使用了下面的代码….

  Object.prototype.getKey = function(value) { for (var key in this) { if (this[key] == value) { return key; } } return null; }; var key = usernames.getKey(toUser); 

它成功地返回了一定的价值(在我的情况下,用户)的关键。 但是,每次我注销的系统,它不工作,并没有重新login。现在我删除了整个方法,并replace下面的代码…

  function findKey(user) { for (var key in usernames) { if (usernames[key] == user) return key; } return false; } var key= findKey(toUser); 

在JSON对象中返回cetrain值的关键字是更简单的方法。 而现在,我的mongodb findOne方法没有问题。 仍然无法通过使用Object.prototype方法返回键来找出错误背后的原因。 然而,奇怪的错误消失了小小的变化。

所以,如果你们被困在相同的错误types(Schematype.castForQuery不是一个函数),它可能会有所帮助

谢谢你的回应。