typescript - NestJs: Hur gör man så att TypeORMModule försöker ansluta till databasen för alltid?


Jag har ett NestJS API. Jag använder TypeORM för att ansluta till databasen. Mitt API är en Docker-container. När jag kör containern, om den inte kan ansluta till databasen, fortsätter den att försöka ungefär 10 gånger och avslutas sedan. Följande visar en del av loggarna:

> nest start

[Nest] 31   - 09/23/2020, 8:39:14 PM   [NestFactory] Starting Nest application...
[Nest] 31   - 09/23/2020, 8:39:14 PM   [InstanceLoader] TypeOrmModule dependencies initialized +39ms
[Nest] 31   - 09/23/2020, 8:39:14 PM   [InstanceLoader] AppModule dependencies initialized +1ms
[Nest] 31   - 09/23/2020, 8:39:14 PM   [TypeOrmModule] Unable to connect to the database. Retrying (1)... +3ms
Error: getaddrinfo ENOTFOUND database database:5432
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:56:26)
[Nest] 31   - 09/23/2020, 8:39:14 PM   [TypeOrmModule] Unable to connect to the database. Retrying (1)... +3ms
Error: getaddrinfo ENOTFOUND database database:5432
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:56:26)
[Nest] 31   - 09/23/2020, 8:39:17 PM   [TypeOrmModule] Unable to connect to the database. Retrying (2)... +3013ms
Error: getaddrinfo ENOTFOUND database database:5432
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:56:26)
[Nest] 31   - 09/23/2020, 8:39:17 PM   [TypeOrmModule] Unable to connect to the database. Retrying (2)... +3ms
Error: getaddrinfo ENOTFOUND database database:5432
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:56:26)
[Nest] 31   - 09/23/2020, 8:39:20 PM   [TypeOrmModule] Unable to connect to the database. Retrying (3)... +3010ms
Error: getaddrinfo ENOTFOUND database database:5432
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:56:26)
[Nest] 31   - 09/23/2020, 8:39:20 PM   [TypeOrmModule] Unable to connect to the database. Retrying (3)... +2ms
Error: getaddrinfo ENOTFOUND database database:5432

Jag skulle vilja att TypeORMModule fortsatte att försöka för alltid. Jag undrade hur jag kan göra det?

Jag har en main.ts som följer:

import { NestFactory } from "@nestjs/core";
import { AppModule } from "./app.module";

async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  await app.listen(3000);
}

bootstrap();

och en app.module.ts som nedan:

import { Module } from "@nestjs/common";
import { TypeOrmModule } from "@nestjs/typeorm";
import { AppController } from "./app.controller";
import { AppService } from "./app.service";
import { PostgresConnectionOptions } from "typeorm/driver/postgres/PostgresConnectionOptions";



@Module({
  imports: [
    TypeOrmModule.forRootAsync({
      useFactory: async () => {
        let options: PostgresConnectionOptions = {
          type: "postgres",
          host: "database",
          port: 5432,
          username: "test",
          password: "postgres",
          database: "test",
          migrationsRun: true,
        };
        return options;
      },
    }),
  ],
  controllers: [AppControlle],
  providers: [AppService],
})

export class AppModule {}

Svar #1

Du kan ange ett stort antal som retryAttempts vilket som standard är 10.

import { Module } from "@nestjs/common";
import { TypeOrmModule } from "@nestjs/typeorm";
import { AppController } from "./app.controller";
import { AppService } from "./app.service";
import { PostgresConnectionOptions } from "typeorm/driver/postgres/PostgresConnectionOptions";



@Module({
  imports: [
    TypeOrmModule.forRootAsync({
      useFactory: async () => {
        let options: PostgresConnectionOptions = {
          type: "postgres",
          host: "database",
          port: 5432,
          username: "test",
          password: "postgres",
          database: "test",
          migrationsRun: true,
          retryAttempts: 9999,
        };
        return options;
      },
    }),
  ],
  controllers: [AppControlle],
  providers: [AppService],
})

export class AppModule {}

Det finns också retryDelay som som standard är 3000ms/3s, du kan använda det alternativet för att kontrollera återförsökstiden.

Relaterade artiklar