You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NestJS健康检查端点如何获取并展示Twilio状态URL的响应内容

问题解答

无论是否使用Terminus模块,该需求完全可以实现,以下是两种方案的实现思路:

不使用Terminus模块的实现方式

直接自己封装独立的健康检查接口即可,步骤如下:

  • 引入HTTP请求工具(可以用Nest内置的HttpService,或者第三方的axios库)
  • 在接口逻辑中主动请求Twilio状态接口,解析返回的JSON结构体,按需提取你需要的字段(比如状态标识、服务可用性、更新时间等)
  • 自定义返回结构体,把Twilio的状态字段和你的服务自身状态整合后返回即可

示例代码参考:

import { Controller, Get } from '@nestjs/common';
import { HttpService } from '@nestjs/axios';
import { firstValueFrom } from 'rxjs';

@Controller('health')
export class HealthController {
  constructor(private readonly httpService: HttpService) {}

  @Get()
  async checkHealth() {
    try {
      const twilioRes = await firstValueFrom(
        this.httpService.get('https://status.twilio.com/api/v2/status.json')
      );
      // 按需提取字段,示例取了status和page两个根字段下的内容
      const twilioStatus = {
        serviceStatus: twilioRes.data.status.indicator,
        serviceDescription: twilioRes.data.status.description,
        lastUpdated: twilioRes.data.page.updated_at
      };
      return {
        status: 'ok',
        twilio: twilioStatus
      };
    } catch (e) {
      return {
        status: 'fail',
        twilio: { status: 'unreachable', error: e.message }
      };
    }
  }
}

使用Terminus模块的实现方式

官方给出的pingCheck、responseCheck只是基础封装,Terminus支持完全自定义的健康检查指示器,你可以自己实现逻辑解析响应字段,步骤如下:

  • 自定义继承HealthIndicator的Twilio健康检查类
  • 在类内部实现请求、解析JSON、提取字段的逻辑,根据返回的状态判断服务是否健康
  • 把自定义的指示器注册到Terminus的健康检查配置中即可

示例代码参考:

import { Injectable } from '@nestjs/common';
import { HealthIndicator, HealthIndicatorResult, HealthCheckError } from '@nestjs/terminus';
import { HttpService } from '@nestjs/axios';
import { firstValueFrom } from 'rxjs';

@Injectable()
export class TwilioHealthIndicator extends HealthIndicator {
  constructor(private readonly httpService: HttpService) {
    super();
  }

  async check(key: string): Promise<HealthIndicatorResult> {
    try {
      const twilioRes = await firstValueFrom(
        this.httpService.get('https://status.twilio.com/api/v2/status.json')
      );
      const isHealthy = twilioRes.data.status.indicator === 'none'; // 状态为none代表无异常
      const result = this.getStatus(key, isHealthy, {
        serviceStatus: twilioRes.data.status.indicator,
        serviceDescription: twilioRes.data.status.description,
        lastUpdated: twilioRes.data.page.updated_at
      });

      if (isHealthy) {
        return result;
      }
      throw new HealthCheckError('Twilio service abnormal', result);
    } catch (e) {
      const result = this.getStatus(key, false, { error: e.message });
      throw new HealthCheckError('Twilio service unreachable', result);
    }
  }
}

之后你就可以在健康检查的controller里直接引入这个自定义指示器使用,和官方内置的指示器用法完全一致。

内容的提问来源于stack exchange,提问作者João Fernandes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 22:39:01