multi-lane-manager
Version:
Nacos 泳道管理与请求路由组件
90 lines (77 loc) • 3.37 kB
text/typescript
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 模块设置完成 ✅");
},
});