Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.04.2016, 15:04
Новичок на форуме
Отправить личное сообщение для noomnau Посмотреть профиль Найти все сообщения от noomnau
 
Регистрация: 15.04.2016
Сообщений: 8

Вопрос об исправлении ошибки ENOENT на локальном соединении c MySQL (с node-mysql)
Здравствуйте!
  1. Проблема
  2. Ожидаемый правильный результат
  3. Код js для соединения
  4. Успешное выполнение js
  5. Неуспешное выполнение js
  6. Сведения об ошибке ENOENT
  7. Сведения об ошибке в console.log
  8. Описание ошибки из модуля
  9. Описание ошибки с сайта
  10. Результат по указанному адресу и порту
  11. Исследование различий в соединении
  12. Вопрос
Проблема
Проявляется при локальном подключении от веб-сервера node к базе данных MySQL с отключенным Интернет соединением. Веб сервер node и база данных MySQL расположены и функционируют на одном и том же компьютере.
При включенном Интернет соединении всё работает в полном объеме.
При выключенном - node и MySQL, система администрирования базы на локальном сервере тоже работает, но запрос из node к базе данных не выполняется.
Ожидаемый правильный результат
Параллельная Интернет соединениям (не зависящая от них) связь сервера node с базой данных.
Исследование проблемы
Привели к обнаружению различия в параметрах подключения при включенном и выключенном Интернет соединении.
Код js для соединения
/*Подключение модуля связи с mysql*/
var mysql = require('../node_modules/npm/node_modules/mysql');
/*Параметры подключения к серверу бд*/
var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : 'root',
  database : 'db'
});
/*Вызов подключения*/
connection.connect();
/*Вывод в консоль параметров соединения*/
console.log(connection.database);
/*Строка c SQL запросом*/
var strQuery = "SELECT * FROM t_structtype";	
/*Выполнение строки запроса с возвращаемая функция*/
connection.query( strQuery, function(err, rows){
	console.log(connection);
  	if(err)	{
  		console.log( err );//или throw err для более подробного лога;
  	}else{
  		console.log( rows );
  	}
});
/*Завершение соединения*/
connection.end();


Успешное выполнение js
Возвращает в консоль результат запроса, например:
Код:
C:\PROGRA~1\nodejs>node test.js
[ RowDataPacket { id: 1, name: 'процесс' },{...},...] - всё хорошо.
Неуспешное выполнение js
Возвращает сведения об ошибке:
Код:
C:\PROGRA~1\nodejs\smpl\test.js:20
                throw err;
                ^
Сведения об ошибке
Код:
Error: getaddrinfo ENOENT localhost:3306
    at Object.exports._errnoException (util.js:890:11)
    at errnoException (dns.js:31:15)
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:77:26)
    --------------------
    at Protocol._enqueue (C:\PROGRA~1\nodejs\node_modules\npm\node_modules\mysql\lib\protocol\Protocol.js:141:48)
    at Protocol.handshake (<...>\Protocol.js:52:41)
    at Connection.connect (<...>\lib\Connection.js:125:18)
    at Object.<anonymous> (C:\PROGRA~1\nodejs\smpl\test.js:23:12)
    at Module._compile (module.js:413:34)
    at Object.Module._extensions..js (module.js:422:10)
    at Module.load (module.js:357:32)
    at Function.Module._load (module.js:314:12)
    at Function.Module.runMain (module.js:447:10)
    at startup (node.js:142:18)
Сведения об ошибке в console.log
Код:
C:\PROGRA~1\nodejs>node test.js
{ [Error: getaddrinfo ENOENT localhost:3306]
  code: 'ENOENT',
  errno: 'ENOENT',
  syscall: 'getaddrinfo',
  hostname: 'localhost',
  host: 'localhost',
  port: 3306,
  fatal: true }
Описание ошибки из модуля
Код:
case 'ENOENT':
      short.push(['enoent', er.message])
      detail.push([
        'enoent',
        [
          er.message,
          'This is most likely not a problem with npm itself',
          'and is related to npm not being able to find a file.',
          er.file ? "\nCheck if the file '" + er.file + "' is present." : ''
        ].join('\n')
      ])
break
Описание ошибки с сайта
Код:
ENOENT (No such file or directory): Commonly raised by fs 
operations to indicate that a component of the specified pathname 
does not exist -- no entity (file or directory) could be found by the given path.
Результат по указанному адресу и порту
Веб страница с адресом и портом для соединения работает и отзывается:
N 5.7.11-log%^p=- X яч!яЃKKxF9 [bKmysql_native_password!я„#08S01Got packets out of order

Всё в порядке, админка бд работает с этим хостом и портом успешно.
Исследование различий в соединении
С отключенным Интернет соединением локалхост работает на нужных портах. Бд работает. Код подключения к бд с node выдает ошибку ENOENT при выполнении запроса.
Исследование соединения с локальным сервером( console.log(connection) ) возвращает описание результатов соединения с разницей в наличии протокола при соединении с Интернетом и без.
Код:
Connection {
  domain: null,
  _events: {},
  _eventsCount: 0,
  _maxListeners: undefined,
  config:
   ConnectionConfig {
     host:<...тут всё в порядке...>
     clientFlags: 455631,
(!?) protocol41: true },
  _socket:
   Socket {
     _connecting: false,
     _hadError: false,
     _handle:
(!?)    TCP {
        _externalStream: {},
        fd: -1,
        reading: true,
        owner: [Circular],
        onread: [Function: onread],
        onconnection: null,
        writeQueueSize: 0 },
     _parent: null,
     _host: 'localhost',
     _readableState:
      ReadableState {
       <порядок>
(!?)    reading: false,
        sync: false,
        needReadable: true,
        emittedReadable: false,
        readableListening: false,
        resumeScheduled: false,
        defaultEncoding: 'utf8',
        ranOut: false,
        awaitDrain: 0,
        readingMore: false,
        decoder: null,
        encoding: null },
(!?) readable: true,
     domain: null,
     _events:
      { end: [Object],
        finish: [Function: onSocketFinish],
        _socketEnd: [Function: onSocketEnd],
        data: [Function],
        error: [Function: bound ],
        connect: [Object] },
(~7) _eventsCount: 6,
     _maxListeners: undefined,
     _writableState:
      WritableState {
        objectMode: false,
        highWaterMark: 16384,
        needDrain: false,
 (~)    ending: false,
 (~)    ended: false,
 (~)    finished: false,
        decodeStrings: false,
        defaultEncoding: 'utf8',
        length: 0,
        writing: false,
        corked: 0,
 (~)    sync: false,
        bufferProcessing: false,
        onwrite: [Function],
        writecb: null,
        writelen: 0,
        bufferedRequest: null,
        lastBufferedRequest: null,
        pendingcb: 0,
 (~)    prefinished: false,
        errorEmitted: false,
        bufferedRequestCount: 0,
        corkedRequestsFree: [Object] },
 (~) writable: true,
     allowHalfOpen: false,
 (~) destroyed: false,
 (~) bytesRead: 501,
 (~) _bytesDispatched: 102,
     _sockname: null,
     _pendingData: null,
     _pendingEncoding: '',
     server: null,
     _server: null,
     _idleTimeout: -1,
     _idleNext: null,
     _idlePrev: null,
(~)  _idleStart: 605,
     read: [Function],
     _consuming: true },
  _protocol:
   Protocol {
     domain: null,
     _events:
      { data: [Function],
        end: [Object],
        handshake: [Function: bound _handleProtocolHandshake],
        unhandledError: [Function: bound ],
        drain: [Function: bound ],
        enqueue: [Function: bound _handleProtocolEnqueue] },
     _eventsCount: 6,
     _maxListeners: undefined,
     readable: true,
     writable: true,
     _config:
      ConnectionConfig {
        host: 'localhost',
        port: 3306,
        localAddress: undefined,
        socketPath: undefined,
        user: 'root',
        password: 'root',<...тут всё в порядке...>
        clientFlags: 455631,
(!?)    protocol41: true },
     _connection: [Circular],
     _callback: null,
(~)  _fatalError: null,
     _quitSequence:
      Quit {
      <...>        _repeat: null },
     _handshakeSequence:
      Handshake {
        <...>
(?)     _handshakeInitializationPacket: [Object] },
(~)  _handshaked: true,
     _ended: false,
     _destroyed: false,
(~)  _queue: [ [Object], [Object] ],
(~)  _handshakeInitializationPacket:
      HandshakeInitializationPacket {
        protocolVersion: 10,
        serverVersion: '5.7.11-log',
        threadId: 77,
        scrambleBuff1: <Buffer 3a 35 15 47 06 63 59 67>,
        filler1: <Buffer 00>,
        serverCapabilities1: 63487,
        serverLanguage: 33,
        serverStatus: 2,
        serverCapabilities2: 33279,
        scrambleLength: 21,
        filler2: <Buffer 00 00 00 00 00 00 00 00 00 00>,
        scrambleBuff2: <Buffer 15 50 22 28 65 4d 64 7c 64 5b 1a 2d>,
        filler3: <Buffer 00>,
        pluginData: 'mysql_native_password',
        protocol41: true },
     _parser:
      Parser {
        _supportBigNumbers: false,
(+)     _buffer: <Buffer 01 00 ... >,
        _longPacketBuffers: [],
(+)     _offset: 408,
(+)     _packetEnd: 408,
(+)     _packetHeader: [Object],
(+)     _packetOffset: 403,
        _onError: [Function: bound handleParserError],
        _onPacket: [Function: bound ],
(+)     _nextPacketNumber: 16,
        _encoding: 'utf-8',
        _paused: false } },
  _connectCalled: true,
(!?)state: 'authenticated',
(!?)threadId: 77 }
Для сравнения - при отключенном интернет соединении лог подключения к локальной бд отличается значениями или отсутствием выделенных знаками (+),(~) или (!?) строк. Отсутствует запись о TCP и protocol41: true и так далее (во вложении подробно).
Вопрос
Подскажите, пожалуйста, способ подключения от локального сервера node к локальной базе данных без соединения с Интернетом.
Вложения:
Тип файла: txt node_connection_complete.txt (7.1 Кб, 0 просмотров)
Тип файла: txt node_connection_error.txt (6.1 Кб, 0 просмотров)

Последний раз редактировалось noomnau, 15.04.2016 в 15:21. Причина: Добавлены вложения - об успешном и ошибочном соединении
Ответить с цитированием
  #2 (permalink)  
Старый 22.08.2016, 13:52
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Вы решили эту проблему? Если да, то как?
__________________
Хусамов Сухроб, Москва, khusamov@yandex.ru
Мой JS-стек: Sencha ExtJS 6, Node.js, TypeScript.
Ответить с цитированием
  #3 (permalink)  
Старый 27.08.2016, 00:20
Профессор
Отправить личное сообщение для Bond Посмотреть профиль Найти все сообщения от Bond
 
Регистрация: 16.06.2013
Сообщений: 172

У меня такая же проблема. БД юзаю от Денвера, еще с пыха осталась, пока ничего другого не ставил.
Тоже копал в этом направление но не так глубоко как ТС. Поковыряюсь еще, посмотрю.
Ответить с цитированием
  #4 (permalink)  
Старый 12.04.2017, 09:49
Новичок на форуме
Отправить личное сообщение для astafiev Посмотреть профиль Найти все сообщения от astafiev
 
Регистрация: 19.08.2016
Сообщений: 1

Решение есть!
Столкнулся с похожей проблемой. Нашел решение на других форумах. Все дело в некорректной работе службы DNS. Вместо localhost в путях к базам нужно указывать адрес 127.0.0.1. Надеюсь Вам поможет! Удачи!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Всплытие событий или что то не так... Кирюха =) jQuery 6 30.03.2013 12:56