Question Erreur Mongoose lors de la création du modèle (en utilisant Step)


En essayant de créer un modèle dans Mongoose, j'obtiens l'erreur suivante

[TypeError: Impossible de lire la propriété 'options' de undefined]

Je n'ai aucune idée de ce qui le cause

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

Je suis très nouveau sur Mongo (et relativement nouveau sur le nœud) mais je n'ai absolument aucune idée de la signification du message d'erreur.

Je sais que j'ai des options définies dans le schéma, mais je ne peux pas voir comment ce serait indéfini. Quelqu'un peut-il me diriger dans la bonne direction?

Note - ceci est une grande coupure du code original, c'est la structure générale (il y a en fait du code ci-dessous) mongoose.Model('Cat... mais il est sauté, je suppose parce que l'erreur est lancée par le mongoose.Model appeler même pas un console.log("Hello"); est imprimé directement après.

MODIFIER  J'ai trouvé que dans Mongoose (mongoose / lib / document.js) essaie d'obtenir this.schema mais c'est indéfini

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

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

21
2018-04-05 18:19


origine


Réponses:


Donc, il se trouve que je ne suis pas le genre d'observateur,

mongoose.Model devrait être mongoose.model


76
2018-04-06 13:06



Vous pouvez également obtenir la même erreur pour appeler cela.

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

si vous supprimez le nouveau.


3
2017-07-18 04:09



Ce message d'erreur sera également affiché lors de l'utilisation de méthodes de modèle dans une chaîne Promise, telles que:

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

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

Pour le résoudre, vous devez vous assurer que votre modèle mangouste conserve son contexte d'origine.

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

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

ou mieux:

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

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

0
2017-11-22 15:25