[英]How to handle Node.js MySql ETIMEDOUT error?
我正在尝试连接到在线托管的 mysql 数据库,所以没有本地主机。 但是每次我尝试连接它都会给我这个错误:
Error: connect ETIMEDOUT
at Connection._handleConnectTimeout (F:\FG\CO\CODESK\CO_PM\node_modules\mysql\lib\Connection.js:411:13)
at Object.onceWrapper (events.js:273:13)
at Socket.emit (events.js:182:13)
at Socket._onTimeout (net.js:445:8)
at ontimeout (timers.js:427:11)
at tryOnTimeout (timers.js:289:5)
at listOnTimeout (timers.js:252:5)
at Timer.processTimers (timers.js:212:10)
--------------------
at Protocol._enqueue (F:\FG\CO\CODESK\CO_PM\node_modules\mysql\lib\protocol\Protocol.js:144:48)
at Protocol.handshake (F:\FG\CO\CODESK\CO_PM\node_modules\mysql\lib\protocol\Protocol.js:51:23)
at Connection.connect (F:\FG\CO\CODESK\CO_PM\node_modules\mysql\lib\Connection.js:118:18)
at condb (file:///F:/FG/CO/CODESK/CO_PM/dist/:59:16)
at HTMLDocument.<anonymous> (file:///F:/FG/CO/CODESK/CO_PM/dist/:23:5)
at j (F:\FG\CO\CODESK\CO_PM\node_modules\scripts\jquery.min.js:2:29999)
at k (F:\FG\CO\CODESK\CO_PM\node_modules\scripts\jquery.min.js:2:30313)
at e.invokeTask (file:///F:/FG/CO/CODESK/CO_PM/dist/polyfills.c6871e56cb80756a5498.js:1:7780)
at t.runTask (file:///F:/FG/CO/CODESK/CO_PM/dist/polyfills.c6871e56cb80756a5498.js:1:2964)
at t.invokeTask (file:///F:/FG/CO/CODESK/CO_PM/dist/polyfills.c6871e56cb80756a5498.js:1:8870)
这是用于连接的代码:
var mysql = require('mysql');
//login credentials have been replaced with placeholders
var connection = mysql.createConnection({
host : 'thehost',
user : 'theuser',
password : 'thepassword',
database : 'thedb',
});
connection.connect();
$clientquery = "SELECT * FROM fa_ec_clients WHERE company_id = 'fc51b2dc49b0e4e76a90332f0e5cdafd'";
connection.query($clientquery, function (error, results, fields) {
if (error) alert(error);
console.log(results);
});
connection.end();
有没有人知道我该如何解决这个问题?
首先,始终检查从.connect()
返回的错误:
connection.connect(function(err) {
if (err) {
console.error('error connecting: ', err);
return;
}
});
这样更容易分辨出哪里出了问题,您甚至可以编写代码来恢复。
其次,您的连接请求超时。 这意味着在主机thehost
是根本无视你的要求。 许多托管服务提供商,尤其是每月 5 美元的托管服务提供商,只允许从他们自己的服务器群中通过 API 访问他们的 MySQL 数据库。 他们将防火墙配置为忽略对内部服务(如数据库)的外部请求。
某些(并非全部)托管提供商提供配置设置,以允许其客户直接从外部访问 MySQL。 您应该查看他们的帮助文档,或就此询问客户支持代表。
他们为什么这样做呢? 安全性和多租户:许多客户共享一个 MySQL 服务器,如果网络蠕虫设法闯入 MySQL,他可能会使服务器崩溃或窃取数据。
如果它在配置了 CSF 防火墙的 VPS 上,您需要通过 SSH 将您的 IP 列入白名单。 否则,即使通过 cPanel 的远程 MYSql 添加后,它仍然会抛出完全高于错误。
# csf -a <VPS-IP>
# csf -r
您也可以通过 WHM 快速完成。 刚刚发布,因为它可能会帮助某人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.