我对NodeJS,require和mongoose有一个相当奇怪的问题。 我创造了这样一个用户模型的模式:需要模型的猫鼬错误
let mongoose = require('mongoose');
let Schema = mongoose.Schema;
let depositSchema = new Schema({
customer: String,
tyres : {
amount: { type: Number, min: 1, required : true},
tyreType : { type: String, required : true }
},
created : {
at : { type: Date, default : Date.now },
by : { type : Schema.ObjectId }
},
last_modified : {
at : { type: Date },
by : { type: Schema.ObjectId }
},
located_at : {
column: { type: String, required : true },
row: { type: String, required : true }
}
});
depositSchema.pre('save', function(next) {
let date = new Date();
this.last_modified.at = date;
if(!this.created.at) {
this.created.at = date;
}
next();
});
module.exports = mongoose.model('Deposit', depositSchema);
所以,你可以看到文件导出猫鼬模型。 如果我需要这样的文件在另一个这样的:
let Deposit = require('../../models/deposit);
一切都很好。一切正常,我没有问题使用该模型,并从它创建对象将其保存在Mongo中。
但是,如果我需要的模式是这样的:
let Deposit = require('../../models/Deposit);
我得到这个错误从蒙戈:在该行
/app/node_modules/mongoose/lib/index.js:376
throw new mongoose.Error.OverwriteModelError(name);
^
MongooseError: Cannot overwrite `Deposit` model once compiled.
错误点,我需要的模式。
我搜索了与require相似的问题,但没有找到任何有用的东西解释了我的问题。 与另一个模型发生同样的问题,但拼写方向不同。 我很困惑。也许有人遇到同样的问题,或者能够解释发生了什么事情以及造成问题的原因。
预先感谢您。
大家都成功了一周。
谢谢你@爱情关键你的答案。它工作正常。我想知道接收模型的两种方式之间的实际区别在哪里?我使用的那个被许多在他们的博客和教程中写的人使用。 – W0RLDB47ANCE
您使用mongoose.model('Deposit',depositSchema)定义模型的对象;没有必要再执行一次。每当你使用require时,通过使用require你的文件得到执行。所以得到它的方式是:让Deposit = mongoose.model('Deposit'); –
好的,很高兴知道。非常感谢您的回答和解释 – W0RLDB47ANCE