簡體   English   中英

貓鼬錯誤需要模型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM