关于node.js:节点需要为mongoose Schema执行两次代码

Node require executes code twice for mongoose Schemas

我在要求执行代码两次时遇到问题。在标准的Express应用程序上,我构建了Mongoose模式,每个模式都包含在自己的文件中,然后导出它们。

1
2
3
4
5
6
//user.js
const User = mongoose.model('User', userSchema)
module.exports = User

//In other files
const User = require('../models/User')

现在我在应用程序的两个地方使用它,并得到一个错误消息说

1
Cannot overwrite `User` model once compiled.

所以上面的代码被调用了两次,因为它是目前创建模型的唯一代码。但是,我希望节点只执行一次,因为它在我的代码中是必需的。

真正奇怪的是,从Git查看早期版本时,我会得到相同的错误,而与我一起工作的人也会得到相同的错误。所以我不知道该在哪里寻找解决方案。


现在找到了解决方案。

原来我需要这个模块一次作为models/user,一次作为model/User,在require的缓存中创建了两个单独的模块。

关于这个问题有很多讨论:

一问题

另一问题

老公关

这似乎是由于Windows解析路径不区分大小写,而其他系统解析路径区分大小写,因此节点对大小写敏感。

一个新的"原因"模块被执行。简单的要求是两次拼写小写解决了这个问题。


我认为问题出在"const"中,您使用它来声明变量"user"。尝试使用"var"而不是。

1
2
3
4
5
6
//user.js
var User = mongoose.model('User', userSchema)
module.exports = User

//In other files
var User = require('../models/User')

P/S:这是一个关于"const"和"var"的链接:

在javascript中常量?什么时候用,有必要吗

希望对您有所帮助!