UNPKG

multi-lane-manager

Version:

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

49 lines (40 loc) 1.74 kB
import { createServerMiddleware } from './server-utils'; import type { H3Event } from 'h3'; /** * 泳道管理服务器中间件 * * 这个中间件负责处理跨泳道请求的路由和转发。 * 当请求包含目标泳道头信息且目标泳道与当前泳道不同时, * 中间件会查询 Nacos 获取目标泳道的健康实例,并将请求转发到目标实例。 * * 中间件通过 createServerMiddleware 函数创建,该函数定义在 server-utils.ts 中。 */ // 创建中间件处理函数 const middleware = createServerMiddleware(); // 导出中间件处理函数 export default async (event: H3Event) => { // 检查请求是否已经被处理过,避免重复处理 if (event.context._laneManagerHandled) { return; } // 记录中间件被调用 console.log(`[multi-lane-manager:server-middleware] 中间件被调用,路径: ${event.path}`); // 特别记录 API 请求 if (event.path.startsWith('/api/')) { console.log(`[multi-lane-manager:server-middleware] 处理 API 请求: ${event.path}, 方法: ${event.node.req.method}`); } try { // 调用实际的中间件处理函数 return await middleware(event); } catch (error) { console.error(`[multi-lane-manager:server-middleware] 处理请求时出错: ${error instanceof Error ? error.message : String(error)}`); // 如果响应头尚未发送,返回错误响应 if (!event.node.res.headersSent) { event.node.res.statusCode = 500; event.node.res.setHeader('Content-Type', 'text/plain'); event.node.res.end(`处理请求时出错: ${error instanceof Error ? error.message : '未知错误'}`); } // 标记请求已处理 event.context._laneManagerHandled = true; } };