节点需要为mongoose Schemas执行两次代码

时间:2016-08-30 09:39:48

标签: node.js express mongoose

我遇到要求执行两次代码的问题。在标准的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检出早期版本我得到了同样的错误,与我一起工作的人得到了同样的错误。所以我没有更多想法在哪里寻找解决方案。

2 个答案:

答案 0 :(得分:2)

现在找到解决方案。

结果我需要模块一次为models/user,一次为model/User,在需要的缓存中创建两个独立的模块。

对此有很多讨论:

one issue

another issue

old PR

这似乎是由于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

希望对你有所帮助!