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

Express路由中使用Dynamic import返回404错误是什么原因?

问题原因
  • 核心错误:await后定义的匿名异步函数未调用,你写的await (async function () {...})仅声明了异步函数,未添加()执行,导致await等待的是函数对象而非Promise,最终app.use接收到的不是Router实例,路由未成功挂载因此返回404。
  • 次要问题1:server.js中调用async类型的router函数时未添加await,会导致服务启动后路由仍未完成挂载,请求触发时找不到对应路由。
  • 次要问题2:router.js中使用express.Router()但未导入express依赖,会触发运行时报错。
  • 潜在问题:导入Controller时文件名大小写与实际文件(HelloWorldController.js)不匹配,在大小写敏感的操作系统(如Linux)中会导致导入失败。
修正后代码

router.js

import express from 'express'

export default async function (app) {
    // 异步自执行函数末尾添加()执行
    app.use('/', await (async function () {
        // 文件名与实际保持一致
        const helloWorldController = await import('./HelloWorldController.js')
        const router = express.Router()
        router.get('/', helloWorldController.helloWorld)
        return router
    })())
}

server.js

import express from 'express'
import router from './router.js'
// 补充你使用的logger依赖导入,否则会触发变量未定义错误
import logger from '你使用的日志依赖包'

const app = express()

// 等待路由初始化完成后再启动服务
async function startServer() {
    await router(app)
    app.listen(3000, function(){
        logger.ready(`Web Server is running on port 3000`)
    })
}

startServer()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:57:00