mysql - knex mysql connect ECONNREFUSED 用于同一服务器上的 3 个应用程序中的 1 个

标签 mysql node.js express knex.js econnrefused

使用 express、knex、dotenv 的 node.js 项目

我创建了我的项目的副本,将其视为暂存环境。它与我的实时项目在同一台主机上运行,​​但在不同的端口上。启动服务器时没有错误。

但是,当我导航到它并尝试获取/(通过 knex 从数据库中提取数据)时,我在控制台中收到此错误:

注意:虽然我的 knexfile 的主机值为“localhost”,但错误是将我的网络服务器的外部 IP 地址显示为其尝试连接的地址(在下面的代码段中用“mywebserverIP”替换)

{ Error: connect ECONNREFUSED mywebserverIP:3306
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1082:14)
    --------------------
    at Protocol._enqueue (/usr/home/jessie/gs-staging/node_modules/mysql/lib/protocol/Protocol.js:144:48)
    at Protocol.handshake (/usr/home/jessie/gs-staging/node_modules/mysql/lib/protocol/Protocol.js:51:23)
    at Connection.connect (/usr/home/jessie/gs-staging/node_modules/mysql/lib/Connection.js:118:18)
    at /usr/home/jessie/gs-staging/node_modules/knex/lib/dialects/mysql/index.js:95:18
    at Promise._execute (/usr/home/jessie/gs-staging/node_modules/bluebird/js/release/debuggability.js:313:9)
    at Promise._resolveFromExecutor (/usr/home/jessie/gs-staging/node_modules/bluebird/js/release/promise.js:483:18)
    at new Promise (/usr/home/jessie/gs-staging/node_modules/bluebird/js/release/promise.js:79:10)
    at Client_MySQL.acquireRawConnection (/usr/home/jessie/gs-staging/node_modules/knex/lib/dialects/mysql/index.js:90:12)
    at create (/usr/home/jessie/gs-staging/node_modules/knex/lib/client.js:280:23)
    at tryPromise (/usr/home/jessie/gs-staging/node_modules/tarn/lib/Pool.js:366:22)
    at tryPromise (/usr/home/jessie/gs-staging/node_modules/tarn/lib/utils.js:57:20)
    at Promise (/usr/home/jessie/gs-staging/node_modules/tarn/lib/Pool.js:366:5)
    at new Promise (<anonymous>)
    at callbackOrPromise (/usr/home/jessie/gs-staging/node_modules/tarn/lib/Pool.js:357:10)
    at Pool._create (/usr/home/jessie/gs-staging/node_modules/tarn/lib/Pool.js:307:5)
    at Pool._doCreate (/usr/home/jessie/gs-staging/node_modules/tarn/lib/Pool.js:275:32)
  errno: 'ECONNREFUSED',
  code: 'ECONNREFUSED',
  syscall: 'connect',
  address: 'mywebserverIP',
  port: 3306,
  fatal: true }

我已经阅读了多篇关于拒绝连接意味着什么的帖子,我仍然感到困惑的唯一原因是它是该服务器上使用此配置的 3 个项目中唯一一个有问题的项目。

我有另一个 node/express/knex 项目(一个管理实用程序),它使用相同的 knex 配置以相同的凭据连接到同一 mysql 服务器上的同一数据库……并且它可以正常工作。实时站点始终启动并运行,具有相同的配置。

实时版本、暂存副本和管理实用程序都具有相同的 knex 文件(以及变量的匹配 .env 文件):

module.exports = {
    client: 'mysql',
    connection: {
        user: process.env.GS_DB_USER,
        password: process.env.GS_DB_PASS,
        host: process.env.GS_DB_HOST,
        database: 'gs'
    },
    pool: {
        min: 1,
        max: 1
        }
}

我只能想象该副本以一种我不知道要寻找的方式与实际网站发生冲突。我错过了什么?

最佳答案

发现在失败的实例中,.env 文件中的值已被修改,因此 GS_DB_HOST 被定义为公共(public)主机名。将值改回 localhost,它起作用了。

先仔细检查所有基础知识的练习!

关于mysql - knex mysql connect ECONNREFUSED 用于同一服务器上的 3 个应用程序中的 1 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54776027/

相关文章:

MySQL:插入错误 "Cannot be NULL"-- DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP

javascript - 为什么我的删除函数只删除 jquery 中express中的第一个元素

javascript - ExpressJS ajax发送空数据

php - 如何遍历数组以插入数据库

mysql - 如何用MySQL准备语句写 "create user ?"

php - Laravel: SQLSTATE[HY000] [2054] 服务器请求客户端未知的身份验证方法

javascript - 如何使用nodejs获取mongodb的slave状态?

node.js - 如何在node.js服务器的客户端下载存储在服务器中的pdf文件

javascript - 在javascript中循环完成后如何执行语句?

没有模板引擎的 Node.js