multi-lane-manager
Version:
Nacos 泳道管理与请求路由组件
110 lines (96 loc) • 3.33 kB
text/typescript
/**
* 默认配置值
*
* 此文件包含所有默认配置值,方便集中管理和调整
*/
// No imports needed
// Nacos 服务器配置
export const DEFAULT_LANE_SERVER = 'localhost:8848'; // 服务器地址和端口
export const DEFAULT_LANE_NAMESPACE = 'public';
export const DEFAULT_LANE_GROUP_NAME = 'DEFAULT_GROUP';
// 心跳配置
export const DEFAULT_LANE_HEARTBEAT_INTERVAL = 5000; // 心跳间隔(毫秒)
export const DEFAULT_LANE_INSTANCE_TTL = 15000; // 实例过期时间(毫秒)
// 服务配置
export const DEFAULT_SERVICE_NAME = null; // 不提供默认值,确保必须明确指定服务名称
export const DEFAULT_LANE_ID = 'baseline'; // 默认泳道ID为 baseline
export const DEFAULT_HOST = 'localhost';
export const DEFAULT_PORT = 3000;
// 泳道配置
export const DEFAULT_TARGET_LANE_HEADER = 'X-Lane-ID'; // 保留旧名称以兼容
export const DEFAULT_LANE_TARGET_HEADER = 'X-Lane-ID';
export const DEFAULT_LANE_ENABLED = false;
export const DEFAULT_LANE_COOKIE_ENABLED = true; // 是否启用从cookie中检测泳道ID
// 响应头常量
export const HEADER_PROXIED_BY = 'X-Proxied-By';
export const HEADER_ORIGINAL_LANE = 'X-Original-Lane';
export const HEADER_PROXIED_BY_VALUE = 'multi-lane-manager';
// 调试头常量
export const HEADER_LANE_DEBUG = 'X-Lane-Debug';
export const HEADER_LANE_DETAIL = 'X-Lane-Detail';
// 超时配置
export const DEFAULT_LANE_PROXY_TIMEOUT = 15000;
export const DEFAULT_LANE_REGISTRATION_TIMEOUT = 5000;
// 日志配置
export const DEFAULT_LOG_LEVEL = 'info';
/**
* 安全地处理响应头值,移除无效字符
*
* @param headerValue 原始响应头值或值数组
* @returns 处理后的安全响应头值
*/
export function getSafeHeaderValue(headerValue: string | string[]): string {
try {
if (Array.isArray(headerValue)) {
// 如果是数组,处理每个元素并用 | 连接
return headerValue
.map(item => item.replace(/[\r\n\t]/g, ' ').replace(/[^\x20-\x7E]/g, ''))
.join(' | ');
} else {
// 如果是字符串,直接处理
return headerValue.replace(/[\r\n\t]/g, ' ').replace(/[^\x20-\x7E]/g, '');
}
} catch (error) {
// 如果处理过程中出错,返回一个安全的默认值
return 'Error processing header value';
}
}
/**
* 获取环境变量值,如果不存在则使用默认值
*
* @param key 环境变量名
* @param defaultValue 默认值
* @returns 环境变量值或默认值
*/
export function getEnvOrDefault(key: string, defaultValue: string): string {
return process.env[key] || defaultValue;
}
/**
* 获取环境变量的布尔值
*
* @param key 环境变量名
* @param defaultValue 默认值
* @returns 布尔值
*/
export function getBooleanEnv(key: string, defaultValue: boolean): boolean {
const value = process.env[key];
if (value === undefined) {
return defaultValue;
}
return value.toLowerCase() === 'true';
}
/**
* 获取环境变量的数字值
*
* @param key 环境变量名
* @param defaultValue 默认值
* @returns 数字值
*/
export function getNumberEnv(key: string, defaultValue: number): number {
const value = process.env[key];
if (value === undefined) {
return defaultValue;
}
const parsed = parseInt(value, 10);
return isNaN(parsed) ? defaultValue : parsed;
}