2013-04-05 5 views
21

При попытке создать модель в Мангуста я получаю следующую ошибкуMongoose ошибка создания модели (с использованием Step)

[Ошибка типа: «варианты» Не удается прочитать свойство неопределенных]

Я понятия не имею, что нет заставляя его

"use strict"; 
var Step = require('step'); 
var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

function randomFunction() { 
    var categorySchema = new Schema({ 
     id: Number, 
     name: String, 
     description: String 
    }, { collection: 'categories' }); 

    var Category; 

    //... 

    mongoose.connect('mongodb://localhost/grouping'); 

    new Step(
     function() { //Connect to mongodb 
      var db = mongoose.connection; 
      db.on('error', console.error.bind(console, 'connection error:')); 
      db.on('open', this); 
     }, 
     function() { //Create model 
      console.log(categorySchema); //Logs the schema object right 
      Category = mongoose.Model('Category', categorySchema); 


     }, 
     function(err) { 
      console.log(err); //Error here 
     }); 
    //... 
} 

Я новичок в Монго (и достаточно новый для узла), но я совершенно не знаю, что означает сообщение об ошибке.

Я знаю, что у меня есть параметры, определенные в схеме, но я не могу понять, как это будет неопределенно, может ли кто-нибудь указать мне в правильном направлении?

Примечание - это большой вырезать из исходного кода, это общая структура (есть на самом деле какой-то код ниже mongoose.Model('Cat..., но она будет пропущена, я предполагаю, потому что ошибка возникает в mongoose.Model вызова не даже console.log("Hello"); печатается сразу после него.

EDIT Я обнаружил, что внутри Mongoose (мангуст/Lib/document.js) пытается получить this.schema, но это не определено

function Document (obj, fields, skipId) { //Line 37 
    this.$__ = new InternalCache; 
    this.isNew = true; 
    this.errors = undefined; 

    var schema = this.schema; //-> undefined 
    // ... 
+0

Вы уверены, что вы подключены к MongoDB, правильный код для подключения является 'mongoose.connect ('MongoDB: // хост/базы данных', функция (ERR) {console.log ('error occured', err);}); '? – drinchev

+0

Я попробую, спасибо. Я обнаружил, что другой код подключения где-то работал лучше для меня, потому что он был разделен – Sam

+0

Оказывается, я пропустил строку из моего вопроса, я добавлю ее в – Sam

ответ

74

Так получается из Я не observent вида,

mongoose.Model должен быть mongoose.model

+18

Я тоже выгляжу беспомощным. –

+2

Я, пять, кажется ненаблюдаем. – Frosty619

+2

Я, шесть, кажется ненаблюдаю. –

3

Вы также можете получить ту же ошибку для вызова этого.

MyModel = new mongoose.model('<your model name>', mySchema)

если вы удалите новый.

0

Это сообщение об ошибке также будет отображаться при использовании методов модели в Promise цепи, такие как:

const Product = mongoose.model('Product', ProductSchema) 

ScrapProducts() 
    .then(mapToModel) 
    .then(Product.create) 

Чтобы решить эту проблему вы должны убедиться, что ваша модель мангуста сохраняет свой первоначальный контекст.

const Product = mongoose.model('Product', ProductSchema) 

ScrapProducts() 
    .then(mapToModel) 
    .then(function(data) { 
    return Product.create(data) 
    }) 

или лучше:

const Product = mongoose.model('Product', ProductSchema) 

ScrapProducts() 
    .then(mapToModel) 
    .then(Product.create.bind(Product)) 
Смежные вопросы