模型问题猫鼬
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');
并拥有它们都在一个对象中。我正在为我的答案添加一个示例。以上是关于模型问题猫鼬的主要内容,如果未能解决你的问题,请参考以下文章