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

require带大括号与普通require的区别及调用失败原因咨询

两种require写法的区别及报错原因分析

写法区别

第一种写法

const authController = require("../controller/authController");
  • 直接将目标模块导出的全部内容赋值给authController变量。无论模块用module.exports导出单个对象/函数,还是用exports挂载多个属性,这个变量都会直接指向模块的最终导出结果。

第二种写法

const { authController } = require("../controller/authController");
  • 这是ES6对象解构赋值语法,意思是从模块导出的对象中,提取名为authController的属性并赋值给同名变量。如果模块导出的对象里不存在这个属性,变量会变成undefined。

报错原因

你调用authController.createUser报错,核心原因是你的authController.js模块导出结构和第二种写法不匹配:

  • 假设你的模块是这样导出的:
    // authController.js
    module.exports = {
      createUser: () => { /* 业务逻辑 */ },
      login: () => { /* 业务逻辑 */ }
    }
    
    此时模块导出的对象里并没有authController这个属性,解构后authController变量为undefined,调用undefined.createUser就会触发Cannot read properties of undefined (reading 'createUser')错误。
  • 而第一种写法中,authController直接指向模块导出的整个对象,所以authController.createUser可以正常调用。

只有当模块导出结构包含authController属性时,第二种写法才有效,比如:

// authController.js
module.exports = {
  authController: {
    createUser: () => { /* 业务逻辑 */ },
    login: () => { /* 业务逻辑 */ }
  }
}

内容的提问来源于stack exchange,提问作者barankibar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 07:50:26