godaddy/terminus TypeScript支持完整的类型定义和使用指南【免费下载链接】terminusGraceful shutdown and Kubernetes readiness / liveness checks for any Node.js HTTP applications项目地址: https://gitcode.com/gh_mirrors/te/terminus在现代Node.js应用开发中优雅关闭和健康检查是确保应用可靠性的关键功能。godaddy/terminus作为一个专业的HTTP应用优雅关闭和Kubernetes健康检查库提供了完整的TypeScript类型支持让开发者能够在TypeScript项目中获得更好的开发体验和类型安全。本文将详细介绍terminus的TypeScript支持包括完整的类型定义、使用指南和最佳实践。 为什么需要TypeScript支持TypeScript作为JavaScript的超集提供了静态类型检查、更好的IDE支持和更可靠的代码维护性。对于像terminus这样处理应用生命周期和健康检查的关键库类型安全尤为重要避免运行时错误类型检查可以在编译时捕获潜在的错误更好的IDE支持自动补全、类型提示和文档查看代码可维护性清晰的接口定义让团队协作更顺畅与现有TypeScript项目集成无缝融入现代Node.js开发工作流 安装与基本配置要在TypeScript项目中使用terminus首先需要安装依赖npm install godaddy/terminusterminus已经内置了完整的类型定义无需额外安装types包。类型定义文件位于项目的typings/index.d.ts路径中。 核心类型定义详解terminus提供了丰富的类型定义主要包含以下几个关键接口1.TerminusOptions 接口这是terminus配置的核心接口包含了所有可配置选项interface TerminusOptions { healthChecks?: HealthCheckMap; caseInsensitive?: boolean; timeout?: number; signal?: string; signals?: string[]; sendFailuresDuringShutdown?: boolean; statusOk?: number; statusOkResponse?: Recordstring, unknown; statusError?: number; statusErrorResponse?: Recordstring, unknown; useExit0?: boolean; onSignal?: () Promiseany; onSendFailureDuringShutdown?: () Promiseany; onShutdown?: () Promiseany; beforeShutdown?: () Promiseany; logger?: (msg: string, err: Error) void; headers?: { [key: string]: string }; }2.HealthCheck 类型健康检查函数的类型定义接收状态对象并返回Promisetype HealthCheck ({ state }: { state: TerminusState }) Promiseany;3.HealthCheckError 类自定义的健康检查错误类用于在健康检查失败时提供更详细的错误信息export class HealthCheckError extends Error { constructor(message: string, causes: any); public causes: any; } 完整的TypeScript使用示例下面是一个完整的TypeScript使用示例展示了如何在Express应用中集成terminusimport * as http from http; import express from express; import { createTerminus, HealthCheckError, HealthCheck, TerminusOptions } from godaddy/terminus; const app express(); // 定义健康检查函数 const healthCheck: HealthCheck async ({ state }) { // 检查数据库连接 const dbStatus await checkDatabaseConnection(); // 检查外部服务 const externalServiceStatus await checkExternalService(); if (!dbStatus.healthy || !externalServiceStatus.healthy) { throw new HealthCheckError(Health check failed, { database: dbStatus, externalService: externalServiceStatus }); } return { uptime: process.uptime(), timestamp: new Date().toISOString(), checks: { database: dbStatus, externalService: externalServiceStatus } }; }; // 定义优雅关闭处理函数 async function onSignal() { console.log(服务器开始清理...); // 关闭数据库连接 await closeDatabaseConnections(); // 清理缓存 await clearCaches(); } async function onShutdown() { console.log(清理完成服务器正在关闭...); } // 配置terminus选项 const options: TerminusOptions { healthChecks: { /health: healthCheck, /readiness: healthCheck, verbatim: true, __unsafeExposeStackTraces: false }, timeout: 5000, signal: SIGTERM, signals: [SIGINT, SIGTERM], sendFailuresDuringShutdown: true, statusOk: 200, statusError: 503, onSignal, onShutdown, beforeShutdown: async () { // Kubernetes readiness probe延迟 return new Promise(resolve setTimeout(resolve, 5000)); }, logger: (msg, err) console.error(msg, err), headers: { Cache-Control: no-cache, Content-Type: application/json } }; const server http.createServer(app); createTerminus(server, options); server.listen(3000, () { console.log(服务器启动在端口 3000); }); 类型安全的优势1.配置验证TypeScript会在编译时验证你的配置是否正确// TypeScript会提示错误timeout应该是number类型 const invalidOptions: TerminusOptions { timeout: 1000, // ❌ 错误类型不匹配 healthChecks: { /health: () Promise.resolve() } };2.自动补全IDE会根据类型定义提供自动补全const options: TerminusOptions { // 输入heal时IDE会自动提示healthChecks healthChecks: { // 输入/时IDE会提示可用的路由 /health: () Promise.resolve() }, // 输入on时IDE会提示onSignal、onShutdown等选项 onSignal: async () { // 清理逻辑 } };3.错误处理类型安全使用HealthCheckError时TypeScript确保你正确处理错误const healthCheck: HealthCheck async () { try { const results await Promise.all([ checkDatabase(), checkRedis(), checkExternalAPI() ]); const errors results.filter(r r.error); if (errors.length 0) { // TypeScript知道causes参数的类型 throw new HealthCheckError(部分服务不可用, errors); } return { status: healthy, details: results }; } catch (error) { // TypeScript知道error可能是HealthCheckError if (error instanceof HealthCheckError) { console.error(健康检查失败原因:, error.causes); } throw error; } };️ 与不同框架的集成Express框架集成查看完整的Express集成示例typings/express.test.tsimport * as http from http; import * as express from express; import { createTerminus } from godaddy/terminus; const app express(); app.get(/, (req, res) res.send(ok)); const server http.createServer(app); createTerminus(server, { healthChecks: { /healthcheck: () Promise.resolve() } }).listen(3000);Koa框架集成查看Koa集成类型测试typings/koa.test.tsimport * as http from http; import Koa from koa; import { createTerminus } from godaddy/terminus; const app new Koa(); const server http.createServer(app.callback()); createTerminus(server, { healthChecks: { /health: async () { // Koa特定的健康检查逻辑 return Promise.resolve({ koa: healthy }); } } }); server.listen(3000); Kubernetes环境的最佳实践在Kubernetes环境中terminus的TypeScript支持特别有价值1. 完整的生命周期管理const k8sOptions: TerminusOptions { healthChecks: { /healthz: livenessProbe, // 存活探针 /readyz: readinessProbe, // 就绪探针 verbatim: true }, beforeShutdown: async () { // 等待Kubernetes更新端点 return new Promise(resolve setTimeout(resolve, 10000)); }, useExit0: true, // 优雅退出避免Kubernetes告警 signal: SIGTERM, timeout: 30000 // 30秒优雅关闭超时 };2. 详细的健康状态报告interface HealthStatus { status: healthy | unhealthy; timestamp: string; components: { database: ComponentStatus; cache: ComponentStatus; messageQueue: ComponentStatus; }; } const readinessProbe: HealthCheck async ({ state }) { const components await checkAllComponents(); const status: HealthStatus { status: components.every(c c.healthy) ? healthy : unhealthy, timestamp: new Date().toISOString(), components: { database: components[0], cache: components[1], messageQueue: components[2] } }; return status; }; 调试与问题排查1. 类型检查测试terminus项目包含了类型检查测试确保类型定义的准确性# 运行类型检查测试 npm run test-typings这个命令会使用TypeScript编译器检查所有类型定义文件确保没有类型错误。2. 常见类型错误解决问题类型Promise 不能分配给类型() Promise 解决方案// ❌ 错误 const options: TerminusOptions { onSignal: Promise.resolve() // 类型不匹配 }; // ✅ 正确 const options: TerminusOptions { onSignal: () Promise.resolve() // 返回Promise的函数 }; 性能优化建议1. 使用正确的类型注解// 使用具体的返回类型避免any const healthCheck: HealthCheck async (): PromiseHealthStatus { // 具体的实现逻辑 return { status: healthy, checks: { /* 具体检查结果 */ } }; };2. 利用类型推断// TypeScript可以推断出options的类型 const options { healthChecks: { /health: async () ({ status: ok }) }, timeout: 5000 // 不需要显式声明TerminusOptions类型 } satisfies TerminusOptions; // 使用satisfies进行类型检查 总结godaddy/terminus的TypeScript支持为Node.js应用提供了完整的类型安全优雅关闭和健康检查解决方案。通过内置的类型定义开发者可以✅ 获得完整的IDE支持和自动补全✅ 在编译时捕获配置错误✅ 与现有TypeScript项目无缝集成✅ 实现更可靠的Kubernetes部署✅ 提高代码的可维护性和团队协作效率无论你是构建微服务、API网关还是传统的Web应用terminus的TypeScript支持都能帮助你构建更稳定、更可靠的Node.js应用。开始使用terminus的类型安全特性让你的应用在关闭时也能保持优雅提示完整的类型定义可以在项目的typings/index.d.ts文件中查看实际使用示例可以参考typings/index.test.ts和typings/express.test.ts文件。【免费下载链接】terminusGraceful shutdown and Kubernetes readiness / liveness checks for any Node.js HTTP applications项目地址: https://gitcode.com/gh_mirrors/te/terminus创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考