中间件全局注册失效主因是时机、顺序或作用域错误:vue 3需在createapp()后、mount()前调用app.use();express/koa需确保use()顺序正确、路径匹配且函数签名合规、next()被调用;vue插件须含符合规范的install方法。

中间件全局注册失效,通常不是代码写错了,而是注册时机、顺序或作用域没对上。Vue 3 的 app.use() 必须在应用实例创建后、挂载前调用;Express 或 Koa 则依赖 use() 的调用顺序和路径匹配逻辑。
检查注册时机(Vue 3)
全局中间件(如路由守卫、请求拦截插件)需在 createApp() 之后、app.mount() 之前执行:
- ❌ 错误:在
main.js外部提前调用app.use(...),或在mount()后才注册 - ✅ 正确:确保所有
app.use()都在app.mount('#app')前完成 - 示例:
const app = createApp(App) app.use(router) // ✅ 在 mount 前 app.use(store) // ✅ app.use(httpPlugin) // ✅ 自定义中间件/插件 app.mount('#app')
确认中间件函数签名(Express/Koa)
全局中间件必须接收 req, res, next(Express)或 ctx, next(Koa),且必须调用 next() 否则请求会卡住:
- ❌ 错误:漏掉
next(),或用箭头函数导致this指向异常(Koa 中影响上下文) - ✅ 正确:使用普通函数,并显式调用
next() - Express 示例:
app.use((req, res, next) => { console.log('全局中间件执行') next() // ⚠️ 必须有,否则后续路由不触发 })
排查路径与顺序问题(Express/Koa)
Express/Koa 中间件按注册顺序执行,且路径不匹配就不会触发:
- ❌ 错误:把中间件注册在
app.get('/api')之后,或路径写成app.use('/api', middleware)却期望它处理/user - ✅ 正确:全局中间件用
app.use(middleware)(无路径参数),确保放在所有路由注册之前 - 顺序建议:
app.use(logger) // ✅ 全局日志 app.use(cors()) // ✅ 跨域 app.use(express.json()) // ✅ 解析 body app.use('/api', apiRouter) // ✅ 路由分组 app.use(errorHandler) // ✅ 错误处理(放最后)
Vue 插件未正确导出或安装
自定义 Vue 插件若全局注册失效,大概率是插件对象缺少 install 方法,或导出方式不对:
- ❌ 错误:插件导出为普通对象,或
install方法未接收app参数 - ✅ 正确:插件必须是带
install的对象,且方法签名符合 Vue 3 规范 - 示例:
// plugins/http.js export default { install(app, options = {}) { app.config.globalProperties.$http = axios.create(options) // 或提供 composable:app.provide('http', axios) } }然后在
main.js中:app.use(httpPlugin)











