UNPKG

multi-lane-manager

Version:

Nacos 泳道管理与请求路由组件

90 lines (77 loc) 3.37 kB
import { defineNuxtModule, createResolver, addServerHandler } from "@nuxt/kit"; /** * 多泳道管理模块 * * 这个模块提供了多泳道管理功能,包括: * 1. 服务注册与发现:将服务实例注册到 Nacos,并从 Nacos 获取目标泳道的服务实例 * 2. 跨泳道请求转发:将请求转发到目标泳道的服务实例 * 3. 健康检查:提供健康检查接口 */ export default defineNuxtModule({ meta: { name: "multi-lane-manager", configKey: "multiLaneManager", // 统一使用与类型定义相同的配置键 compatibility: { nuxt: "^3.0.0", // 兼容 Nuxt 3.0.0 及以上版本 }, }, /** * 模块设置函数 * 负责注册 Nitro 插件和服务器中间件 * * @param _options 模块配置选项 * @param nuxt Nuxt 实例 */ setup(_options, nuxt) { // 创建简单的日志记录器 const logger = { info: (msg: string) => console.log(`[multi-lane-manager:module][INFO] 🔵 ${msg}`), warn: (msg: string) => console.warn(`[multi-lane-manager:module][WARN] 🟠 ${msg}`), error: (msg: string) => console.error(`[multi-lane-manager:module][ERROR] 🔴 ${msg}`), }; logger.info("正在设置 multi-lane-manager 模块..."); // 创建路径解析器 const { resolve } = createResolver(import.meta.url); // 添加 Nitro 插件 try { logger.info("正在添加用于服务注册的 Nitro 插件..."); nuxt.hook('nitro:config', (nitroConfig) => { // 确保 plugins 数组存在 nitroConfig.plugins = nitroConfig.plugins || []; // 添加我们的 Nitro 插件到数组的最前面,确保它最早执行 nitroConfig.plugins.unshift(resolve('./runtime/nitro-plugin')); logger.info("Nitro 插件添加成功 (已设置为最早执行) ✅"); }); } catch (error) { logger.error(`添加 Nitro 插件失败: ${error}`); } // 添加服务器中间件 try { logger.info("正在添加服务器中间件..."); // 添加一个全局中间件,确保它在所有其他中间件之前执行 addServerHandler({ handler: resolve('./runtime/server-middleware.mjs'), middleware: true, route: '/**', // 匹配所有路径 order: -100, // 负数表示更高的优先级,确保最先执行 }); // 为了确保能拦截静态资源,再添加一个特定的处理程序用于 /_nuxt/ 路径 addServerHandler({ handler: resolve('./runtime/server-middleware.mjs'), route: '/_nuxt/**', // 专门匹配 /_nuxt/ 路径下的所有请求 order: -100, // 负数表示更高的优先级,确保最先执行 }); // 为了确保能拦截 API 请求,添加一个特定的处理程序用于 /api/ 路径 addServerHandler({ handler: resolve('./runtime/server-middleware.mjs'), route: '/api/**', // 专门匹配 /api/ 路径下的所有请求 middleware: true, // 确保它作为中间件执行 order: -100, // 负数表示更高的优先级,确保最先执行 }); logger.info("服务器中间件添加成功,设置为最高优先级 ✅"); } catch (error) { logger.error(`添加服务器中间件失败: ${error}`); } logger.info("Multi-lane-manager 模块设置完成 ✅"); }, });