Объект, поддерживаемый Mongoose, не может быть сохранен из-за (загадочного) «decodeInt» / VirtualType / ошибки Getter - PullRequest
0 голосов
/ 31 марта 2012

Мне нужна помощь при сохранении экземпляра моделей, поддерживаемых Mongoose. При сохранении сущности выдается следующая ошибка:

node.js:134
00:27:16 web.1     |         throw e; // process.nextTick error, or 'error' event on first tick
00:27:16 web.1     |         ^
00:27:16 web.1     | TypeError: Cannot call method 'decodeInt' of undefined
00:27:16 web.1     |     at model.<anonymous> (.../node_modules/mongoose-types/lib/plugins/useTimestamps.js:13:37)
00:27:16 web.1     |     at VirtualType.applyGetters (.../node_modules/mongoose/lib/virtualtype.js:53:25)
00:27:16 web.1     |     at model.get (...

Определение модели

    var mongooseTypes = require("mongoose-types"), useTimestamps = mongooseTypes.useTimestamps;
mongooseTypes.loadTypes(mongoose);

var Url = mongoose.SchemaTypes.Url;

var Schema = mongoose.Schema
  , ObjectId = Schema.ObjectId;

var TextSnippetSchema = new mongoose.Schema({
    text_id   : ObjectId
  , text      : String
  , context   : String
  , url       : Url
  , position  : String
});

    TextSnippetSchema.plugin(useTimestamps);
    var TextSnippet = mongoose.model('TextSnippet',TextSnippetSchema);

Код для создания и сохранения нового объекта выглядит следующим образом:

var instance = new TextSnippet();

   instance.text= req.query["text"];
   instance.context= req.query["ctx"];
   instance.url = req.query["url"]; 
   instance.position= "";
   console.log(JSON.stringify(instance));
   instance.save(function (err) {
       console.log(err); 
   });

Насколько я понимаю, у меня нет свойства, для которого понадобился бы "decodeInt": однако объект не может быть сохранен.

Не могли бы вы помочь мне заставить постоянство объектов работать на меня?

1 Ответ

1 голос
/ 09 апреля 2012

Проблема в том, что mongodb больше не экспортирует BinaryParser.Вам нужно изменить импорт в useTimestamps на что-то подобное.

file ./node_modules/mongoose-types/lib/plugins/useTimestamps.js

var mongoose = require('mongoose')
  , ObjectID = mongoose.ObjectID
  , BinaryParser = require('mongoose/node_modules/mongodb/node_modules/bson').BinaryParser;

идти.Я также предоставлю владельцу патч для этого.

...