Подтвердить что ты не робот

Ошибка Mongoose при создании модели (с использованием шага)

При попытке создать модель в Mongoose я получаю следующую ошибку:

[TypeError: Невозможно прочитать свойства "параметры" undefined]

Я не знаю, что его вызывает

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

Я очень новичок в Mongo (и довольно новичок в node), но я абсолютно не знаю, что означает сообщение об ошибке.

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

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

ИЗМЕНИТЬ Я обнаружил, что внутри Mongoose (mongoose/lib/document.js) пытается получить this.schema, но он undefined

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

    var schema = this.schema; //-> undefined
    // ...
4b9b3361

Ответ 1

Итак, оказывается, я не наблюдательный,

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

Ответ 2

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

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

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

Ответ 3

Это сообщение об ошибке также будет отображаться при использовании методов модели в цепочке 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))