You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:51:20