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

Node.js环境下使用ES6 import组织Express路由文件夹的问题

Express项目ES6模块路由注册实现方案

前置准备

首先确保Node.js环境启用ES模块支持,在项目根目录的package.json中添加配置:

{
  "type": "module"
}

开启后Node.js会以ES模块规范解析.js文件,同时导入路径需要补全完整文件后缀,不可省略.js/.mjs等后缀名。

方案1:静态导入(推荐常用场景)

直接在入口文件静态导入路由模块导出的注册函数,调用时传入express实例即可,逻辑和原CommonJS写法完全一致:

入口文件代码

import express from 'express'
// 导入路由入口的默认导出,注意补全.js后缀
import registerRoutes from './routes/index.js'

const app = express()
// 直接调用注册函数传入app实例
registerRoutes(app)

app.listen(3000, () => console.log('服务启动'))

路由入口(./routes/index.js)代码示例

如果你的路由文件夹是统一入口管理多个子路由,写法如下:

import registerDeviceIdRoute from './devices_id.js'

// 默认导出接收app参数的注册函数,和原有逻辑一致
export default (app) => {
  registerDeviceIdRoute(app)
  // 其他路由注册逻辑依次添加即可
}

你现有的devices_id.js导出写法无需修改,完全符合ES模块规范。

方案2:动态导入(适配你使用import()的场景)

import()是动态导入语法,返回Promise对象,需要等待异步加载完成后才能拿到导出的注册函数:

写法1:Promise链式调用

import express from 'express'
const app = express()

import('./routes/index.js').then(module => {
  // 模块的default属性对应你导出的注册函数
  const registerRoutes = module.default
  registerRoutes(app)
})

写法2:顶层await(Node.js 14.8及以上版本支持)

import express from 'express'
const app = express()

const { default: registerRoutes } = await import('./routes/index.js')
registerRoutes(app)

注意事项

  • ES模块不支持require、module.exports、__dirname等CommonJS专属API,切换全量ES模块时需要统一修改对应写法。
  • 若无需路由懒加载等特殊逻辑,优先使用静态导入写法,性能更好且逻辑更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 00:54:09