使用 Windows 时我从来没有遇到过这个问题。
由于某种原因,当我尝试从本地 Node.js 应用程序连接到本地 MySQL 数据库时,我无法获得任何效果。
在尝试连接到 MySQL 之前,代码中的所有操作都可追溯地运行。在 MySQL 连接之后,所有操作都可追溯地运行良好(假设插入存根分配来替代 MySQL 调用中缺失的结果)。
我徒劳地查看了系统日志和 MySQL 日志,想找到任何线索。谷歌搜索后,有时会提示 MySQL 可能拒绝通过网络连接,而是使用套接字连接。我相应地调整了连接参数(无端口:....,添加了套接字路径:.....,条目),但情况并没有好转。
以下是基本测试代码
const mysql = require('mysql');
const queryNodeAppData = (query) =>
{
console.log("In MySQL Query script now ...")
console.log("Query: " + query);
const con = mysql.createConnection(
{
host: "localhost",
socketPath: '/var/run/mysqld/mysqld.sock',
database: "nodeapp",
user: "root",
password: "My.$qu3@1$y"
});
con.connect(function(errconn)
{
if (errconn)
{
console.error('Error connecting: ' + errconn.stack);
return "Invalid";
}
else
{
console.log('Connected as id ' + connection.threadId);
return "Valid;"
}
});
};
module.exports = { queryNodeAppData };
尝试使用以下命令运行应用程序后,相应的终端输出节点守护程序如下所示。由于 app.js 将用户任务委托给其他模块(例如路由器、处理程序、格式检查器、mysql 等),因此会产生控制台日志。有时会记录输出。
最终导致应用程序崩溃的错误完全是由于尝试将未定义的值写入文本定义的 XHR 响应变量。使用任何字符串存根响应都会使应用程序返回 200 状态代码,而不会出现任何错误。
[nodemon] starting `node app.js`
HTTP Server for NodeApp started at port 3000
We're in to the back end of NodeApp !
Someone has POSTed data to the Node server ...
URL trimmed endpoint: reg-user
Input Value: tamjk
In router.js now ...
Endpoint: reg-user Data: tamjk
Handler: authen.js
In handler authen.js now ...
Mode: reg Field: user Value: tamjk
In format validation now ...
Format Validation Message: Valid format
Connecting to user-data database checking user ...
In MySQL Query script now ...
Query: SELECT user FROM users WHERE user = 'tamjk'
Router returned message undefined
Callback Message: undefined
Message: undefined
Sent back response: undefined
_http_outgoing.js:696
throw new ERR_INVALID_ARG_TYPE('first argument',
^
TypeError [ERR_INVALID_ARG_TYPE]: The first argument must be of type string or an instance of Buffer or Uint8Array. Received undefined
at write_ (_http_outgoing.js:696:11)
at ServerResponse.write (_http_outgoing.js:661:15)
at reqCallback (/home/sandbar/Desktop/nodeapp-local/app.js:116:6)
at IncomingMessage.<anonymous> (/home/sandbar/Desktop/nodeapp-local/app.js:87:10)
at IncomingMessage.emit (events.js:327:22)
at endReadableNT (_stream_readable.js:1327:12)
at processTicksAndRejections (internal/process/task_queues.js:80:21) {
code: 'ERR_INVALID_ARG_TYPE'
}
[nodemon] app crashed - waiting for file changes before starting...
除了上述问题之外,当我尝试从终端访问 MySQL 数据库时,我也开始遇到不合作的情况。
$ sudo mysql
[sudo] password for sandbar:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
总而言之,我想知道 Ubuntu 20.04.2 和 MySQL 8.0.27 是否真的可以一起工作。
答案1
答案是mysql由于 MySQL 8 之后的身份验证协议更加严格,该软件包不再可靠地处理与 MySQL 的连接。
尽管mysql在过去的 2-3 年中声称这些问题已经得到解决,但这些问题仍然存在。
因此其他用户的建议是使用npm 包mysql2反而。
我发现这是合理的建议并且我正在接受它。