Ответ 1
Итак, оказывается, я не наблюдательный,
mongoose.Model
должен быть mongoose.Model
При попытке создать модель в 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
// ...
Итак, оказывается, я не наблюдательный,
mongoose.Model
должен быть mongoose.Model
Вы также можете получить ту же ошибку для вызова этого.
MyModel = new mongoose.model('<your model name>', mySchema)
если вы удалите новый.
Это сообщение об ошибке также будет отображаться при использовании методов модели в цепочке 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))