1

使用 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 服务器上的同一个数据库......并且它可以正常工作。实时站点已启动并始终运行,具有相同的配置。

实时版本、暂存副本和管理实用程序都具有相同的 knexfiles(以及用于变量的匹配 .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
        }
}

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

4

1 回答 1

1

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

先复习所有基础知识的练习!

于 2019-02-20T20:51:30.077 回答