postgresql 无法连接railway.app postgres到nestjs应用程序

mu0hgdu0  于 9个月前  发布在  PostgreSQL
关注(0)|答案(1)|浏览(171)

我有一个NestJS应用程序,其中app.module.ts具有以下信息

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UserModule } from './user/user.module';
import { CertificationsModule } from './certifications/certifications.module';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'postgres',
      url: process.env.DATABASE_PRIVATE_URL,
      database: process.env.PGDATABASE || process.env.POSTGRES_DB,
      host: process.env.PGHOST,
      port: parseInt(process.env.PGPORT),
      username: process.env.PGUSER || process.env.POSTGRES_USER,
      password: process.env.PGPASSWORD || process.env.POSTGRES_PASSWORD,
      autoLoadEntities: true,
      synchronize: false,
      ssl: true,
      extra: {
        ssl: {
          rejectUnauthorized: true,
        },
      },
    }),
    UserModule,,
    CertificationsModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

字符串
这些是我从railway.app Postgres DB获得的环境变量:

DATABASE_PRIVATE_URL=***
DATABASE_URL=***
PGDATA=***
PGDATABASE=***
PGHOST=***
PGPASSWORD=***
PGPORT=***
PGUSER=***
POSTGRES_DB=***
POSTGRES_PASSWORD=***
POSTGRES_USER=***
SSL_CERT_DAYS=***


我尝试了所有可能的组合,但最后我只得到了这个:

Error: connect ETIMEDOUT 35.212.181.170:5432

at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1555:16)

[Nest] 45  - 12/07/2023, 7:03:32 PM   ERROR [TypeOrmModule] Unable to connect to the database. Retrying (2)...

Error: connect ETIMEDOUT 35.212.181.170:5432

at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1555:16)


我的终端是否缺少任何配置?

wnrlj8wa

wnrlj8wa1#

在NestJS中,您可以通过使用config模块沿着dotenv模块从.env文件加载环境变量来使用环境变量。
安装所需的软件包:

npm install --save @nestjs/config dotenv
npm install --save-dev @types/dotenv

字符串
在项目的根目录下创建一个.env文件,并添加环境变量:

DB_URL=your_actual_database_url_here


创建一个配置模块来加载环境变量。创建一个名为config.module.ts的文件:

// config.module.ts
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
    }),
  ],
})
export class MyConfigModule {}


在AppModule中导入并使用此MyConfigModule:

// app.module.ts
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UserModule } from './user/user.module';
import { CertificationsModule } from './certifications/certifications.module';

import { MyConfigModule } from './config.module';

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
    }),
    TypeOrmModule.forRoot({
      type: 'postgres',
      url: process.env.DB_URL, // Use the environment variable here
      autoLoadEntities: true,
      synchronize: false,
    }),
    UserModule,
    CertificationsModule,
    MyConfigModule, // Add your config module here
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}


现在,您的TypeORM配置将使用.env文件中的DB_URL环境变量。请记住将.env文件中的your_actual_database_url_here替换为实际的数据库URL。

相关问题