我對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