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

Node.js用ES6模块导入controller.js报无对应导出错误如何解决

ESM模块导入导出报错解决方案

问题原因

你在package.json中配置了"type": "module",项目所有JS文件默认按照ES6 Module(ESM)规范解析,但controller.js中使用的exports.xxx是CommonJS模块规范的导出语法,两种规范不兼容,因此无法识别导出内容,触发报错。

修复方案

有两种常用的修复方式,推荐选择第一种,改动最小:

方案1:默认导出方法集合(改动最小)

修改controller.js的导出逻辑,将所有接口方法整合为一个对象做默认导出,原有业务调用逻辑无需改动:

import Userdb from "../model/model.js";

export default {
  create: (req,res) => {
    // 原有业务逻辑保留
  },
  find: (req,res) => {
    // 原有业务逻辑保留
  },
  update: (req,res) => {
    // 原有业务逻辑保留
  },
  delete: (req,res) => {
    // 原有业务逻辑保留
  }
}

然后将index.js中的导入语句修改为默认导入即可:

// 把原来的import {controller} from ...替换成下面的写法
import controller from './server/controller/controller.js'

方案2:单个方法命名导出

每个方法单独做命名导出,全量导入后使用:
controller.js修改为:

import Userdb from "../model/model.js";

export const create = (req,res) =>{
  // 原有业务逻辑保留
}
export const find = (req,res) =>{
  // 原有业务逻辑保留
}
export const update = (req,res) =>{
  // 原有业务逻辑保留
}
export const delete = (req,res) =>{
  // 原有业务逻辑保留
}

index.js中的导入语句修改为全量导入重命名:

import * as controller from './server/controller/controller.js'

原有调用controller.create等的代码也无需改动。

注意事项

开启"type": "module"后,所有JS文件都不能使用CommonJS语法:

  • 禁止使用require()导入模块,统一用import
  • 禁止使用exports、module.exports导出内容,统一用export、export default

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:42:01