Mongoose:CastError:强制转换为ObjectId在path“_id”处的值“me”失败

我知道这个问题有很多版本,但我找不到任何帮助我的东西。

function isAuthenticated() { return compose() // Validate jwt .use(function (req, res, next) { // allow access_token to be passed through query parameter as well if (req.query && req.query.hasOwnProperty('access_token')) { req.headers.authorization = 'Bearer ' + req.query.access_token; } validateJwt(req, res, next); }) // Attach user to request .use(function (req, res, next) { User.findById(req.user._id, function (err, user) { console.log(next); if (err) { return next(err); } if (!user) { return res.send(401); } req.user = user; next(); }); }); } 

这是错误:

 CastError: Cast to ObjectId failed for value "me" at path "_id" at ObjectId.cast (C:\Users\Benoit\Desktop\Gakusei\node_modules\mongoose\lib\ schema\objectid.js:116:13) at ObjectId.castForQuery (C:\Users\Benoit\Desktop\Gakusei\node_modules\mongo ose\lib\schema\objectid.js:165:17) at Query.cast (C:\Users\Benoit\Desktop\Gakusei\node_modules\mongoose\lib\que ry.js:2317:32) at Query.findOne (C:\Users\Benoit\Desktop\Gakusei\node_modules\mongoose\lib\ query.js:1118:10) at Function.findOne (C:\Users\Benoit\Desktop\Gakusei\node_modules\mongoose\l ib\model.js:1049:13) at Function.findById (C:\Users\Benoit\Desktop\Gakusei\node_modules\mongoose\ lib\model.js:986:15) at Object.exports.show [as handle] (C:\Users\Benoit\Desktop\Gakusei\server\a pi\user.js:43:8) at next_layer (C:\Users\Benoit\Desktop\Gakusei\node_modules\express\lib\rout er\route.js:103:13) at next (C:\Users\Benoit\Desktop\Gakusei\node_modules\composable-middleware\ lib\composable-middleware.js:40:9) at Promise.<anonymous> (C:\Users\Benoit\Desktop\Gakusei\server\auth\auth.ser vice.js:37:9) 

我正在适应一些Yeoman样板authentication代码,我没有触及这部分。 任何线索将不胜感激。

为了完善,在这里我的api为'我'

 exports.me = function (req, res, next) { var userId = req.user._id; User.findOne({ _id: userId }, '-salt -hashedPassword', function (err, user) { if (err) { return next(err); } if (!user) { return res.json(401); } res.json(user); }); }; 

您正试图通过查询_id来与findOne访问一个对象,使其等于'我'。 Mongoose试图将string“我”转换为ObjectId但失败。 我不能从traceback中知道是否你的me函数是这个问题(这是findOne在你提供的代码中唯一的地方),但你可以尝试改变函数调用User.findById(userId, ...) 。 不明白为什么userId等于'我',但如果这将有所帮助。 希望这至less给了你一些指导。 如果您仍然有问题,请添加评论。