首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Mongoose findById命令的问题

Mongoose findById命令的问题
EN

Stack Overflow用户
提问于 2020-02-12 15:25:22
回答 3查看 258关注 0票数 1

我有一个nodejs express路由器,路由如下:

代码语言:javascript
运行
AI代码解释
复制
router.get("/book/:id", function(req, res){

    Book.findById(req.params.id).then(function(book){
        if (book) {
            res.json(book);
        } else {
            res.send("Book Not found");
        }
    }).catch(function(err){
        if (err) {
            console.log(err);
            res.send(err);
            throw err;
        }
    })
})

当我使用postman测试路由时,我总是得到这样的错误:

代码语言:javascript
运行
AI代码解释
复制
  { [CastError: Cast to ObjectId failed for value "5e441654a8b2e25bfa3d4507" at path "_id" for model "Book"]
  stringValue: '"5e441654a8b2e25bfa3d4507"',
  kind: 'ObjectId',
  value: '5e441654a8b2e25bfa3d4507',
  path: '_id',
  reason: [TypeError: hex is not a function],
  message: 'Cast to ObjectId failed for value "5e441654a8b2e25bfa3d4507" at path "_id" for model "Book"',
  name: 'CastError',
  model: Model { Book } }

看起来findById命令请求的是mongoose objectId类型,而不是字符串,我尝试了在线解决方案(从堆栈和其他社区),我找到了类似于:

代码语言:javascript
运行
AI代码解释
复制
ObjectId = mongoose.Types.ObjectId
ObjectId = mongoose.Schema.ObjectId 
ObjectId = mongoose.mongo.ObjectId 

然后,解决方案建议这样做:

代码语言:javascript
运行
AI代码解释
复制
id = new ObjectId(req.params.id)
Book.findById(id) 

仍然不能处理hex is not a function错误

有没有人遇到这个错误并设法修复它?注意,我使用的是:

代码语言:javascript
运行
AI代码解释
复制
mongodb cloud hosting, version 4
mongoose 5.8.11
nodejs 4.2.6

这是我的书模型,如果它有帮助的话:

代码语言:javascript
运行
AI代码解释
复制
const schema = new mongoose.Schema({

       title: {
           type: String,
           require: true
       },
       author: {
            type: String,
            require: true
       },
       numberPages: {
            type: Number,
            require: false
       },
       publisher: {
           type: String,
           require: false
       }

});
module.exports = mongoose.model('Book', schema);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-02-13 14:43:11

似乎是节点驱动导致了这个问题(发现我使用的是4.6的旧节点版本),我升级了我的nodejs版本,现在它可以工作了,谢谢大家。

票数 0
EN

Stack Overflow用户

发布于 2020-02-12 15:32:48

请尝试执行以下操作:

代码语言:javascript
运行
AI代码解释
复制
var mongoose = require('mongoose');
...
var myId = new mongoose.Types.ObjectId(req.params.id)
Book.findById(myId).then(function(book) {
...

应该能行得通。

票数 0
EN

Stack Overflow用户

发布于 2020-02-12 15:36:31

您必须在参数字符串中直接传递该id,就像下面的id="5e441654a8b2e25bfa3d4507"。尝试传递不带引号的id=5e441654a8b2e25bfa3d4507

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60191669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档