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

无法将Railway.app PostgreSQL连接至NestJS应用,求配置排查

解决NestJS + Railway PostgreSQL 连接超时问题

问题详情

我有一个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 PostgreSQL获取的环境变量:

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)

排查与解决方案

  • 统一连接配置方式:同时配置url和独立的host/port等参数会导致TypeORM解析冲突。DATABASE_PRIVATE_URL已经包含了所有连接信息(用户、密码、主机、端口、数据库名),建议仅保留url参数,移除其他冗余配置:
TypeOrmModule.forRoot({
  type: 'postgres',
  url: process.env.DATABASE_PRIVATE_URL,
  autoLoadEntities: true,
  synchronize: false,
  ssl: {
    rejectUnauthorized: false,
  },
}),
  • 调整SSL验证规则:Railway托管的PostgreSQL使用自签名SSL证书,开启rejectUnauthorized: true会触发证书验证失败,导致连接超时,改为false即可解决。

  • 修复语法错误:imports数组里的UserModule,,多了一个逗号,这会导致应用启动异常,先修复这个语法问题再测试连接。

  • 确认网络访问权限:

    • 如果是本地开发,DATABASE_PRIVATE_URL对应的数据库可能仅允许Railway项目内的服务访问,需改用公网的DATABASE_URL,或者通过Railway CLI建立本地隧道访问私有数据库。
    • 本地可通过telnet 35.212.181.170 5432测试端口是否可达,若不通则说明网络层面存在限制。

内容的提问来源于stack exchange,提问作者Adeel Imran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:00:39