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

部署在Digital Ocean的Node.js应用生产环境出现ECONNREFUSED错误

问题诊断与解决方案

错误根源

你的错误 ECONNREFUSED ::1:5432 和 ECONNREFUSED 127.0.0.1:5432 明确指向核心问题:生产环境中Node.js应用在尝试连接本地(localhost)的PostgreSQL数据库,但App Platform的应用容器内并未部署PostgreSQL服务。这和async/await用法无关,本质是数据库连接配置错误。

开发环境正常是因为你本地运行了PostgreSQL,而生产环境的App Platform容器默认不内置数据库,必须连接外部托管数据库(比如Digital Ocean官方的托管PostgreSQL服务)。

解决方案步骤

1. 修正数据库连接配置

检查你的数据库初始化代码(比如db实例的创建部分),确保生产环境使用远程数据库地址而非localhost:

  • 用环境变量管理配置:在Digital Ocean App Platform的应用设置中添加以下环境变量:
    • DB_HOST:托管PostgreSQL的主机地址(如xxx.db.ondigitalocean.com)
    • DB_PORT:默认5432
    • DB_USER:数据库用户名
    • DB_PASSWORD:数据库密码
    • DB_NAME:目标数据库名称
  • 代码中从环境变量读取配置,示例:
    const { Pool } = require('pg');
    const pool = new Pool({
      host: process.env.DB_HOST,
      port: process.env.DB_PORT,
      user: process.env.DB_USER,
      password: process.env.DB_PASSWORD,
      database: process.env.DB_NAME,
      ssl: { rejectUnauthorized: false } // Digital Ocean托管DB需要开启SSL
    });
    

2. 配置数据库访问权限

如果使用Digital Ocean托管PostgreSQL:

  • 进入托管DB控制面板的Connections选项卡,将App Platform的应用IP加入Trusted Sources;或选择允许任意地址连接(需配合强密码保证安全)。
  • 优先将应用和托管DB部署在同一VPC下,无需额外IP配置即可安全连接。

3. 验证环境变量加载

在应用启动日志中确认环境变量是否正确加载,可临时添加日志代码:

console.log('生产环境DB配置:', {
  host: process.env.DB_HOST,
  port: process.env.DB_PORT
});

如果输出仍为localhost,说明环境变量未正确设置或代码未读取到。

4. 优化代码潜在问题(非当前错误根源,避免后续故障)

你的代码存在async/await与回调混用、错误处理不完整的情况,可优化:

  • 将bcrypt的回调写法改为Promise形式,减少嵌套:
    // 替换原bcrypt.hash回调逻辑
    const hash = await bcrypt.hash(password, saltRounds);
    const user = await createCompanyAccount(email, hash, officeaddress, latCoords, lngCoords);
    req.login(user.rows[0], (err) => {
      if (err) return next(err);
      res.redirect("/dashboard");
    });
    
  • Passport策略的catch块需调用cb(err),避免请求挂起:
    catch (err) {
      console.log(err);
      return cb(err); // 补充这行,将错误传递给Passport
    }
    

内容的提问来源于stack exchange,提问作者Saeb Masarwa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 22:39:50