首页 文章

Mongoose:CastError:对于路径“_id”的值“me”,转换为ObjectId失败

提问于
浏览
1

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

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样板代码,我没有触及这部分 . 任何线索将不胜感激 .

为了完整,这里是我对'我'的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);
  });
};

1 回答

  • 2

    您正尝试通过查询_id等于'me'来使用 findOne 访问对象 . Mongoose尝试将字符串'me'转换为ObjectId但失败 . 我可以't tell from the traceback if it'这是你的 me 函数问题(这是你提供的代码中唯一使用findOne的地方),但你可以尝试将函数调用更改为 User.findById(userId, ...) . 但是,不管怎么说,或者说这对任何人都有帮助 . 希望这至少给你一些方向 . 如果您仍有问题,请添加评论 .

相关问题