使用 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
}
}
我只能想象副本与实时站点以一种我不知道要寻找的方式发生冲突。我错过了什么?