2017-01-08 1 views
6

Я занимаюсь разработкой простой сохраняемости данных приложения с помощью мангуста, после застревания на этой ошибкеMongoose: TypeError: шестигранный не является функцией

CastError: Cast to ObjectId failed for value "{ _id: 'id' }" at path "_id" for model 'foo'

я пытался использовать mongoose.Types.ObjectId как было предложено различными нитями, один partcular: https://stackoverflow.com/a/17223701/4206519, но теперь я получаю новую ошибку:

TypeError: hex is not a function.

Вот соответствующая часть кода:

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"); 
}); 

Будучи новичком, я могу совершить здесь простую ошибку, любая помощь будет оценена по достоинству.

ответ

6

В течение последних 2 дней я также получаю такую ​​же проблему, и это связано с выпуском версии

я использовал эти версии «MongoDB»: «^ 2.2.19»,

«мангуста»: «^ 4.7.6», и получаю ошибку, что Hex не является функцией

тогда я изменить версию «MongoDB»: «2.1.7», «монго новления «:„4.4.8“

и начать работать так, я думаю, что они удалили функцию шестигранной и другой так попробовать после установки этой версии в вашем package.json не использовать^перед именем версии просто добавьте » MongoDB ":" 2.1.7 ", " mongoose ":" 4.4.8 " и установить

+0

Это сработало для меня. Мы должны будем выяснить, что ожидается, если мы хотим обновить. – kmcurry

+0

[ссылка] (https://github.com/Automattic/mongoose/issues/4887) –

1

Удалить var ObjectId = mongoose.Types.ObjectId(id); и он должен работать ... И передать идентификатор вместо ObjectId в функции findById :)

+0

Первоначально я делал именно это, но это породило следующую ошибку: CastError: Cast to ObjectId failed for value" {_id: 'id'} "на пути" _id "для модели 'foo'. –

+1

Хорошо, что это путано, попробуйте: Campground.findOne ({_ id: id}, function (err, found) {...}); – fawee

+0

Я считаю, что оба .findOne ({_ id: id}) и findById (id) в основном одинаковы. попытались, но ничего не изменили здесь. –

1

Если вы используете драйвер MongoDB, вы можете сделать, как

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

Mongoose

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 
}); 
+0

Это дает ту же ошибку: TypeError: hex не является функцией –