猫鼬:类型错误:十六进制不是一个函数



>我正在使用猫鼬开发一个简单的数据持久性应用程序,在遇到此错误后

CastError:模型"foo"的路径"_id"处的值"{ _id: 'id' }"的强制转换为 ObjectId 失败

我尝试按照各种线程的建议使用mongoose.Types.ObjectId,其中一部分:https://stackoverflow.com/a/17223701/4206519,但现在我收到一个新错误:

类型错误:十六进制不是一个函数。

以下是代码的相关部分:

app.get('/campgrounds/:id', function(req, res){
    var id = req.params.id;
    var ObjectId = mongoose.Types.ObjectId(id);
    Campground.findById(ObjectId, function(err, found){
        if (err) {
            console.log(err);
        } else {
            //render show template with that campground
            res.render('show.ejs', {campground: found});
        } 
    });
});
app.listen(3000, function(){
    console.log("server has started");
});

作为一个新手,我可能在这里犯了一个简单的错误,任何帮助将不胜感激。

从最近两天开始,我也遇到了同样的问题,这是由于版本问题

我正在使用这些版本"mongodb": "^2.2.19",

"猫鼬": "^4.7.6",并得到十六进制不是函数的错误

然后我将版本更改为 "Mongodb": "2.1.7", "猫鼬":"4.4.8"

它开始工作,所以我认为他们已经删除了十六进制功能和其他功能,所以在安装此版本后尝试在你的包.json不要使用^之前的版本名称只是添加 "Mongodb": "2.1.7", "猫鼬":"4.4.8"并安装

删除

var ObjectId = mongoose.Types.ObjectId(id);它应该可以工作...并在findById函数中传递id而不是ObjectId:)

如果您使用的是Mongodb驱动程序,则可以执行以下操作

var ObjectID = require('mongodb').ObjectID
var id = new ObjectID(req.params.id); // Hex 

var mongoose = require('mongoose');
var id = mongoose.Types.ObjectId('4edd40c86762e0fb12000003');
var _id = mongoose.mongo.ObjectId("4eb6e7e7e9b7f4194e000001");
console.log(id);
console.log(_id);
//4edd40c86762e0fb12000003
//4eb6e7e7e9b7f4194e000001

如何在 findById 中使用

Campground.findById(id.toString(), function (err, found) { 
        // Do Whatever you like after getting data
 } );

相关内容

  • 没有找到相关文章

最新更新