Knex:错误池2 – 错误:连接ECONNREFUSED

我正在使用Node.js,Express.js,Bookshelf.js和Knex.js

我得到以下错误与默认knex池定义。

Knex:Error Pool2 - Error: connect ECONNREFUSED 

这是以下knex定义(默认pool.min值是2)

 var knex = require('knex')({ client: 'mysql', connection: config.connection, }); 

我得到错误

 Knex:Error Pool2 - Error: connect ECONNREFUSED Knex:Error Pool2 - Error: connect ECONNREFUSED 

在以下定义中,它可以正常工作。

 var knex = require('knex')({ client: 'mysql', connection: config.connection, pool: { min: 0, max: 10 } }); 

我注意到错误是打印n次,其中n在pool.min值。

有人可以告诉我为什么发生这种情况。 虽然,错误已经解决,但由于我是新手,我无法理解为什么会发生这种情况。

当远程系统或服务没有在指定的端口上侦听,或者你之间的防火墙正在显示时,ECONNREFUSED被connect()系统调用返回。

基本上,knex无法连接到数据库服务器。 为什么你没有得到与pool.min错误的原因是0是因为pool2库满足零活动连接,并不会尝试连接到数据库,直到knex需要连接。


为了跟进,knex人似乎并不在意 这一点 。 此外,问题似乎是在启动时遇到ECONNREFUSED时,Pool2对象被销毁,而knex只是无法从中恢复。

这就是说,这个问题只在我启动时发生。 如果数据库发生故障/池build立后,knex将继续尝试连接,直到恢复。 即使ECONNREFUSED被返回,knex或者mysql客户端库中的东西也可以处理重新连接的情况。 考虑到这一点,我所做的是这样的:

 setTimeout(function () { knex.raw('SELECT 1').catch(function (error) { log.fatal('caught exception trying to issue database keep-alive'); // do something fatal, like exit or cluster.worker.disconnect() }); }, 0); 

我创build了knex对象后立即执行此操作。 快速失败。 这适用于我,但YMMV。

正如diz所说,这是knex无法连接到数据库时所看到的错误。 当我得到这个错误时,这是​​因为我没有在本地主机上运行的MySQL服务器(在连接对象中是我的'主机'),它有一个数据库,连接的'数据库'键目的。 我激发了MySQL并创build了空的数据库,一切都很好。 以下是我为同伴们写的一些步骤:

这个运行之前需要MySQL步骤:

  1. mysql.server启动

  2. mysql -u root

  3. CREATE USER'our_user'@'localhost'IDENTIFIED BY'our_password';

  4. CREATE DATABASE dbname;

  5. GRANT ALL ON dbname。* TO'our_user'@'localhost';