项目场景:
使用express框架+MongoDB数据库时,把model文件独立出来,使用时再单独导入model文件
问题描述:
当导入model文件时,会出现如下错误
throw new _mongoose.Error.OverwriteModelError(name);
^
OverwriteModelError: Cannot overwrite `Shop` model once compiled.
问题分析:
分析代码:
// shop.model.js 文件
const mongoose = require('mongoose');
const Types = mongoose.Schema.Types;
const ShopSchema = new mongoose.Schema({
...
});
const ShopCardSchema = new mongoose.Schema({
...
});
module.exports = {
Shop: mongoose.model('Shop', ShopSchema),
ShopCard: mongoose.model('ShopCard', ShopCardSchema)
};
// shop.controller.js 文件
const {Shop, ShopCard} = require('./shop.model');
// goods.controller.js 文件
const {Shop} = require('./Shop.model');
可以发现两处代码导入shop.model.js文件时,文件名拼写不一致
解决方案:
这是因为出现大小写拼写错误。如果只出现一次导入,发生拼写错误,model会正常导入,但如果多处需要导入该文件,那一定要确保文件名拼写相同,否则就会出现如上错误