模型问题猫鼬

Posted

技术标签:

【中文标题】模型问题猫鼬【英文标题】: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)

任何想法将不胜感激

干杯,

【问题讨论】:

【参考方案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'); 并拥有它们都在一个对象中。我正在为我的答案添加一个示例。

以上是关于模型问题猫鼬的主要内容,如果未能解决你的问题,请参考以下文章

将模型参数传递给猫鼬模型

在猫鼬中发布嵌套模型

你如何从猫鼬中删除模型?

验证数组内容猫鼬模型

猫鼬填充没有模型的嵌套模式

重置猫鼬模型缓存