【问题标题】:Model issue mongoose模型问题猫鼬
【发布时间】:2018-03-04 11:33:55
【问题描述】:

这是模型: /doc/proModel.js

module.exports = function (mongooseModels) {
var mongoose = require('mongoose');
mongoose.connect('mongodb://127.0.0.1/DocTest');
var Schema = mongoose.Schema;

var ProSchema = new Schema({
    _id: {type: Schema.Types.ObjectId},
    Titre: {
        type: String,
        //required: true
    },
    Prenom: {
        type: String,
        //required: true
    },
    Nom: {
        type: String,
        //required: true
    }
});

var proModel = {
    Pro: mongoose.model("Pro", ProSchema)
};

return proModel;

这是 main.js:

var mongoose = require('mongoose');
mongoose.connect('mongodb://127.0.0.1/DocTest');
var proModel = require('./doc/proModel');

var pro1 = new proModel().Pro({
_id :{type: new mongoose.Types.ObjectId()},
Nom: "Ok"
});

pro1.save(function (err) {
if (err) return handleError(err);

});

这是我遇到的错误:

发生异常:错误 ReferenceError:未定义handleError 在 /Users/maxime/Documents/Projets/Test/main.js:11:21 在 Model.$wrapCallback (/Users/maxime/Documents/Projets/Test/node_modules/mongoose/lib/model.js:3835:16) 在 /Users/maxime/Documents/Projets/Test/node_modules/mongoose/lib/services/model/applyHooks.js:167:17 在 _combinedTickCallback (内部/进程/next_tick.js:73:7) 在 process._tickCallback (internal/process/next_tick.js:104:9) 在 Timeout.Module.runMain [as _onTimeout] (module.js:606:11) 在 ontimeout (timers.js:386:14) 在 tryOnTimeout (timers.js:250:5) 在 Timer.listOnTimeout (timers.js:214:5)

任何想法将不胜感激

干杯,

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    所以有多个错误

    第一个handleError(err),你的函数handleError不存在。

    其次,您保存模型的方式是错误的。 以下是我将如何编写您的代码:

    /doc/proModel.js

    const mongoose = require('mongoose');
    const Schema = mongoose.Schema;
    
    const ProSchema = new Schema({
        _id: {type: Schema.Types.ObjectId},
        Titre: {
            type: String,
            //required: true
        },
        Prenom: {
            type: String,
            //required: true
        },
        Nom: {
            type: String,
            //required: true
        }
    });
    
    module.exports = mongoose.model("Pro", ProSchema);
    

    /main.js

    const mongoose = require('mongoose');
    const ProModel = require('./doc/proModel');
    
    mongoose.connect('mongodb://127.0.0.1/DocTest');
    
    const pro1 = new ProModel({
        _id : new mongoose.Types.ObjectId(),
        Nom: "Ok"
    });
    
    const handleError = function() {
        console.error(err);
        // handle your error
    };
    
    pro1.save(function (err) {
        if (err) return handleError(err);
    });
    

    根据模型组织,这是我喜欢的应用结构

    /models
      pro-model.js
      users-model.js
      books-model.js
      orders-model.js
      index.js
    
    // /models/index.js file
    const fs = require('fs');
    
    fs.readdirSync(__dirname)
    .forEach((file) => {
        if (file.endsWith("-model.js")) {
            const M = require(`./${file}`);
            exports[M.modelName] = M;
        }
    });
    

    然后,如果您想获得所有模型,您可以这样做:

    const models = require('./models');
    
    new models.Pro({
        _id : new mongoose.Types.ObjectId(),
        Nom: "Ok"
    })
    .save();
    

    【讨论】:

    • 感谢您的回答,我可以将模块(架构)堆叠在一个文件中,还是建议将它们拆分为不同的文件?干杯,
    • 是的,如果您愿意,您绝对可以将它们堆叠在一个文件中。但我更喜欢有一个目录,比如models 目录中每个模型有一个文件,然后在你的模型目录中有一个index.js 文件,它加载所有模型并导出一个对象,这样你就可以做require('./models'); 并拥有它们都在一个对象中。我正在为我的答案添加一个示例。
    猜你喜欢
    • 2017-09-26
    • 1970-01-01
    • 2021-04-10
    • 2017-10-05
    • 2021-03-17
    • 2018-07-15
    • 2014-12-09
    • 2018-12-23
    • 2018-06-23
    相关资源
    最近更新 更多