[英]Mongoose error requiring a model
我對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);
我從Mongo收到此錯誤:
/app/node_modules/mongoose/lib/index.js:376
throw new mongoose.Error.OverwriteModelError(name);
^
MongooseError: Cannot overwrite `Deposit` model once compiled.
我需要模型的線上有錯誤點。
我搜索了與require類似的問題,但沒有找到任何有用的解釋我問題的信息。 另一個模型也會出現相同的問題,但拼寫方向不同。 我很困擾。 也許有人遇到了相同的問題,或者能夠解釋發生了什么/發生了什么以及導致問題的原因。
先感謝您。
祝大家有個成功的一周。
var mongoose = require('mongoose');
let Deposit = mongoose.model('Deposit');
改用上述兩行: let Deposit = require('../../models/deposit');
問題在於節點要求緩存不知道../../models/deposit
和../../models/Deposit
實際上是同一文件。
如果知道它們是正確的,則它將不會再次加載並執行該文件,而是從第一次加載時返回先前導出的值(存儲在緩存中)。
但是,由於它看到這些文件不同,因此它將加載並執行兩次文件,並且第二次將引發錯誤(因為它兩次運行“ create-a-model”代碼,而Mongoose不會) t喜歡)。
有一些解決方法,但最終,每次require()
文件時,都應使用正確的文件名(在Finder / Explorer /任何文件中的顯示方式)。
我相信問題是您在此代碼module.exports = mongoose.model('Deposit', depositSchema);
行上定義了一個名為Deposit的模型module.exports = mongoose.model('Deposit', depositSchema);
然后您嘗試使用具有相同名稱Deposit
的變量再次重新定義它。
您是否嘗試做類似var deposit = requrire(../../models/deposit);
?
我嘗試了Israel.zinc的建議,並在出口行的“ Deposit1”中重命名了存款模型。 之后,我試圖像這樣要求它:
let Deposit = require('../../models/Deposit');
並收到了完全相同的貓鼬錯誤,但提示“無法覆蓋'Deposit1'...”,如果我這樣要求它:
let Deposit = require('../../models/deposit');
一切正常...
您要在其中定義用戶模型的文件的名稱是什么? 我認為這可能只是您要求的文件名錯誤
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.