我遇到要求执行两次代码的问题。在标准的Express应用程序上工作我构建了Mongoose Schema,每个都在自己的文件中并导出它们。
//user.js
const User = mongoose.model('User', userSchema)
module.exports = User
//In other files
const User = require('../models/User')
现在我在我的应用程序的两个地方使用它并得到错误说
Cannot overwrite `User` model once compiled.
因此,上面的代码被调用两次,因为它是现在创建模型的唯一代码。但是我希望Node只执行一次,因为我的代码需要它。
真正奇怪的是从Git检出早期版本我得到了同样的错误,与我一起工作的人得到了同样的错误。所以我没有更多想法在哪里寻找解决方案。
答案 0 :(得分:2)
现在找到解决方案。
结果我需要模块一次为models/user
,一次为model/User
,在需要的缓存中创建两个独立的模块。
对此有很多讨论:
这似乎是由于Windows解析路径不区分大小写,而其他系统解析区分大小写的路径,因此节点敏感。
一个新的'模块'被执行。简单地要求是用小写拼写的时间解决了这个问题。
答案 1 :(得分:0)
我认为问题出在“const”中,用于声明变量“User”。 尝试使用“var”而不是。
//user.js
var User = mongoose.model('User', userSchema)
module.exports = User
//In other files
var User = require('../models/User')
P / S:这是澄清更多关于“const”和“var”的链接:
Const in javascript? When to use it and is it necessary
希望对你有所帮助!