Как справиться с Node.js MySql ETIMEDOUT ошибка? - PullRequest
0 голосов
/ 17 ноября 2018

Я пытаюсь подключиться к базе данных 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();

Есть ли кто-нибудь, кто имеет представление, как я мог бы исправитьэто?

1 Ответ

0 голосов
/ 17 ноября 2018

Прежде всего, всегда проверяйте ошибку, возвращаемую с .connect():

connection.connect(function(err) {
  if (err) {
    console.error('error connecting: ', err);
    return;
  }
});

Будет проще определить, что не так, и вы, возможно, даже сможете написать свой код для восстановления.

Во-вторых, время вашего запроса на соединение истекло.Это означает, что хост на thehost просто игнорирует ваш запрос.Многие хостинг-провайдеры, особенно те, которые предлагают 5 долларов США в месяц, разрешают API-доступ к своим базам данных MySQL только из своих собственных серверных ферм.Они настраивают свои брандмауэры так, чтобы они игнорировали внешние запросы к внутренним сервисам (таким как базы данных)

Некоторые - не все - хостинг-провайдеры предлагают параметр конфигурации, позволяющий своим клиентам получать прямой доступ к MySQL извне.Вы должны посмотреть на их справочную документацию или спросить об этом представителя службы поддержки.

Почему они это делают?Безопасность и многопользовательский режим: многие клиенты используют один и тот же сервер MySQL, и если киберпреступнику удастся взломать MySQL, он может разбить сервер или украсть данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...