module.exports工作机制:Express+MongoDB场景下模型导入疑问解析
为什么导入用户模型后可以直接用
new User而非new users.User? 嘿,这个问题太典型了——刚摸Node.js模块系统的时候,好多人都会在module.exports这儿绕个弯~我来给你掰扯清楚:
核心原因就在于你给module.exports赋值的方式:
在你的users.js里,你写的是:
const User = module.exports = mongoose.model('User', UserSchema)
这里你直接把module.exports设置成了mongoose.model()返回的那个User模型构造函数,而不是把它放进一个对象里当属性。
Node.js的require()函数,本质上就是返回目标文件里module.exports的值。所以当你在其他文件里写:
const User = require('./users.js')
这时候变量User直接拿到的就是那个模型构造函数本身,自然可以直接new User()来创建实例。
要是换一种写法,比如你在users.js里这样导出:
const User = mongoose.model('User', UserSchema) module.exports = { User } // 把模型放进一个对象里导出
那这时候require('./users.js')返回的就是这个包含User属性的对象,你就得写成:
const users = require('./users.js') new users.User() // 得先取对象里的User属性
简单总结下:
- 直接给
module.exports赋值单个值 → require直接拿到这个值 - 给
module.exports赋值一个对象 → require拿到对象,需要访问对应属性
这样是不是就明白啦?
内容的提问来源于stack exchange,提问作者user8972341
相关产品推荐
相关产品推荐

