У меня никогда не было этой проблемы, когда на Windows.
По какой-то причине я не могу получить никакого эффекта при попытке подключиться к локальной базе данных MySQL из локального приложения Node.js.
В коде трассируемо работает все вплоть до попытки подключения к MySQL.
И все прослеживается хорошо (при условии, что назначение заглушки вставлено для замены отсутствующего результата из вызова MySQL) после соединения с MySQL.
Я тщетно просматривал системные журналы и журналы MySQL в поисках какой-либо подсказки. При поиске в Google иногда предполагается, что MySQL может отказывать в соединении через сеть, а вместо этого использовать соединение через сокет. Я соответствующим образом скорректировал параметры соединения (без порта: ...., добавил socketPath: ....., запись), но дела обстоят не лучше.
Ниже приведен базовый тестовый код для
const mysql = требуется ('mysql');
const queryNodeAppData = (запрос) =>
{
console.log("Теперь в скрипте MySQL Query...")
console.log("Запрос: " + запрос);
const con = mysql.createConnection(
{
хост: "локальный",
путь сокета: '/var/run/mysqld/mysqld.sock',
база данных: "nodeapp",
пользователь: «корень»,
пароль: "Мой.$qu3@1$y"
});
con.connect (функция (errconn)
{
если (ошибка)
{
console.error('Ошибка подключения: ' + errconn.stack);
вернуть «Неверно»;
}
еще
{
console.log('Подключено как id ' + connection.threadId);
вернуть «Действительно»;
}
});
};
module.exports = {queryNodeAppData};
Соответствующий вывод терминала после попытки запустить приложение с помощью нодмон ниже.
Журналы консоли создаются, когда задача пользователя делегируется app.js другим модулям, например. маршрутизатор, обработчик, средство проверки формата, mysql и т. д. Выходные данные иногда регистрируются.
Возможная ошибка, приводящая к сбою приложения, связана исключительно с попыткой записать неопределенное значение в определяемую текстом переменную ответа XHR. При заглушке ответа любой строкой приложение возвращает код состояния 200 и не вызывает ошибок.
[nodemon] запуск `node app.js`
HTTP-сервер для NodeApp запущен на порту 3000
Мы в задней части NodeApp!
Кто-то отправил данные на сервер Node...
Конечная точка с обрезанным URL: reg-user
Входное значение: тамджк
В router.js сейчас...
Конечная точка: reg-user Данные: tamjk
Обработчик: authen.js
В обработчике authen.js теперь...
Режим: reg Поле: user Значение: tamjk
Сейчас идет проверка формата...
Сообщение о проверке формата: допустимый формат
Подключение к базе данных пользователя с проверкой пользователя...
В скрипте MySQL Query теперь...
Запрос: ВЫБРАТЬ пользователя ИЗ пользователей, ГДЕ пользователь = 'tamjk'
Маршрутизатор вернул сообщение undefined
Сообщение обратного вызова: не определено
Сообщение: не определено
Отправлен ответ: не определено
_http_outgoing.js:696
бросить новый ERR_INVALID_ARG_TYPE («первый аргумент»,
^
TypeError [ERR_INVALID_ARG_TYPE]: первый аргумент должен быть строкового типа или экземпляром Buffer или Uint8Array. Получено неопределенное
при записи_ (_http_outgoing.js:696:11)
в ServerResponse.write(_http_outgoing.js:661:15)
в reqCallback (/home/sandbar/Desktop/nodeapp-local/app.js:116:6)
в IncomingMessage.<anonymous> (/home/sandbar/Desktop/nodeapp-local/app.js:87:10)
в IncomingMessage.emit (events.js:327:22)
в endReadableNT (_stream_readable.js:1327:12)
в процессеTicksAndRejections (внутренний/процесс/task_queues.js:80:21) {
код: "ERR_INVALID_ARG_TYPE"
}
Сбой приложения [nodemon] — ожидание изменений файла перед запуском...
Помимо вышеупомянутой проблемы, я также начал отказываться от сотрудничества, когда пытаюсь получить доступ к базе данных MySQL с терминала.
$ судо mysql
[sudo] пароль для песочницы:
ОШИБКА 1045 (28000): Доступ запрещен для пользователя «root» @ «localhost» (с использованием пароля: НЕТ)
В общем, мне интересно, действительно ли Ubuntu 20.04.2 и MySQL 8.0.27 созданы для совместной работы.