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.
