首页 > 解决方案 > 如何使用@nestjs/terminus 为 Prisma 创建自定义健康检查?

问题描述

由于@nestjs/terminus没有为 Prisma 提供健康检查,我试图根据他们的Mongoose 健康检查来创建它。

当我尝试:

import * as Prisma from 'prisma';
...
...
  private getContextConnection(): any | null {
    const {
      getConnectionToken,
      // eslint-disable-next-line @typescript-eslint/no-var-requires
    } = require('prisma') as typeof Prisma;

    try {
      return this.moduleRef.get(getConnectionToken('DatabaseConnection') as string, {
        strict: false,
      });
    } catch (err) {
      return null;
    }
  }
...
...
    const connection = options.connection || this.getContextConnection();

    if (!connection) {
      throw new ConnectionNotFoundError(
        this.getStatus(key, isHealthy, {
          message: 'Connection provider not found in application context',
        }),
      );
    }

我似乎总是得到:“消息”:“在应用程序上下文中找不到连接提供程序”。连接有问题,或者我不太了解运行状况检查的实际工作原理

标签: nestjsprismahealth-check

解决方案


mongoose 实现的简单副本不会起作用,因为NestJSMongoosetype/module 和Prisma. 尤其getConnectionToken是包里面不存在Prisma

我无法评论扩展 terminus 以支持 prisma 的最佳方法是什么。您可能需要为此深入研究一下terminus界面。但是,在 Prisma 中获取健康检查/ping 的一种简单方法是使用以下查询:

    prisma.$queryRaw`SELECT 1`

推荐阅读