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

如何在ECMAScript 6中仅针对副作用进行模块导入与导出?

解决ES Module下批量导出Express路由的问题

你之前的写法不符合ES Module(ESM)语法规范,还错误地把路由数组改成了对象,导致Express无法正确挂载路由。下面是对应的正确实现方式:

1. 单个路由文件的ESM改造

先把每个路由文件改成ESM格式,比如src/routes/user.js:

import express from 'express';
const api = express.Router();

// 注意:如果doSomething是中间件函数,不要加()调用,除非它返回的是中间件
api.post('/user', doSomething);

export default api;

2. 批量导出路由的index.js

在src/routes/index.js里,顶层导入所有路由实例,再组成数组导出:

import userRouter from './user.js';
import authRouter from './auth.js';
import demoRouter from './demo.js';

// 和CommonJS版本保持一致,导出路由实例数组
export default [
  userRouter,
  authRouter,
  demoRouter
];

3. 服务文件的ESM写法

在src/handler.js中导入路由数组并挂载:

import express from 'express';
import apiRoutes from './routes/index.js';
const app = express();

// Express支持直接传入路由数组,会自动逐个挂载
app.use(apiRoutes);

// 启动服务示例
app.listen(3000, () => {
  console.log('服务运行在3000端口');
});

关键注意事项

  • 确保项目启用ESM:在package.json中添加"type": "module",否则Node.js会默认按CommonJS解析文件。
  • 你之前的错误点:ESM的import语句必须放在模块顶层,不能嵌套在export default的对象里;同时Express的app.use无法处理你导出的对象,必须保持数组结构才能正确批量挂载路由。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 17:01:35