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
相关产品推荐
相关产品推荐

