问题一
Error connecting to Database Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
at Handshake.Sequence._packetToError (C:\Users\xulon\Desktop\Hb\node\node_modules\mysql\lib\protocol\sequences\Sequence.js:47:14)
at Handshake.ErrorPacket (C:\Users\xulon\Desktop\Hb\node\node_modules\mysql\lib\protocol\sequences\Handshake.js:123:18)
at Protocol._parsePacket (C:\Users\xulon\Desktop\Hb\node\node_modules\mysql\lib\protocol\Protocol.js:291:23)
at Parser._parsePacket (C:\Users\xulon\Desktop\Hb\node\node_modules\mysql\lib\protocol\Parser.js:433:10)
at Parser.write (C:\Users\xulon\Desktop\Hb\node\node_modules\mysql\lib\protocol\Parser.js:43:10)
at Protocol.write (C:\Users\xulon\Desktop\Hb\node\node_modules\mysql\lib\protocol\Protocol.js:38:16)
at Socket.<anonymous> (C:\Users\xulon\Desktop\Hb\node\node_modules\mysql\lib\Connection.js:88:28)
at Socket.<anonymous> (C:\Users\xulon\Desktop\Hb\node\node_modules\mysql\lib\Connection.js:526:10)
at Socket.emit (node:events:513:28)
at addChunk (node:internal/streams/readable:315:12)
--------------------
at Protocol._enqueue (C:\Users\xulon\Desktop\Hb\node\node_modules\mysql\lib\protocol\Protocol.js:144:48)
at Protocol.handshake (C:\Users\xulon\Desktop\Hb\node\node_modules\mysql\lib\protocol\Protocol.js:51:23)
at Connection.connect (C:\Users\xulon\Desktop\Hb\node\node_modules\mysql\lib\Connection.js:116:18)
at C:\Users\xulon\Desktop\Hb\node\node_mysql.js:45:6
at Layer.handle [as handle_request] (C:\Users\xulon\Desktop\Hb\node\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\xulon\Desktop\Hb\node\node_modules\express\lib\router\route.js:144:13)
at Route.dispatch (C:\Users\xulon\Desktop\Hb\node\node_modules\express\lib\router\route.js:114:3)
at Layer.handle [as handle_request] (C:\Users\xulon\Desktop\Hb\node\node_modules\express\lib\router\layer.js:95:5)
at C:\Users\xulon\Desktop\Hb\node\node_modules\express\lib\router\index.js:284:15
at Function.process_params (C:\Users\xulon\Desktop\Hb\node\node_modules\express\lib\router\index.js:346:12) {
code: 'ER_NOT_SUPPORTED_AUTH_MODE',
errno: 1251,
sqlMessage: 'Client does not support authentication protocol requested by server; consider upgrading MySQL client',
sqlState: '08004',
fatal: true
}
-- 查询:
mysql -u root -p
use mysql;
select user,host from user;
-- 执行:(改成自己的密码)
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '000000';
-- 或者:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '000000'
参考:(70条消息) ERROR 1396 (HY000): Operation ALTER USER failed for ‘root‘@‘localhost‘_Mr.Java.的博客-CSDN博客
问题二
Error connecting to Database Error: Cannot enqueue Handshake after already enqueuing a Handshake.
at Protocol._validateEnqueue (C:\Users\xulon\Desktop\Hb\node\node_modules\mysql\lib\protocol\Protocol.js:221:16)
at Protocol._enqueue (C:\Users\xulon\Desktop\Hb\node\node_modules\mysql\lib\protocol\Protocol.js:138:13)
at Protocol.handshake (C:\Users\xulon\Desktop\Hb\node\node_modules\mysql\lib\protocol\Protocol.js:51:23)
at Connection.connect (C:\Users\xulon\Desktop\Hb\node\node_modules\mysql\lib\Connection.js:116:18)
at C:\Users\xulon\Desktop\Hb\node\node_mysql.js:45:6
at Layer.handle [as handle_request] (C:\Users\xulon\Desktop\Hb\node\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\xulon\Desktop\Hb\node\node_modules\express\lib\router\route.js:144:13)
at Route.dispatch (C:\Users\xulon\Desktop\Hb\node\node_modules\express\lib\router\route.js:114:3)
at Layer.handle [as handle_request] (C:\Users\xulon\Desktop\Hb\node\node_modules\express\lib\router\layer.js:95:5)
at C:\Users\xulon\Desktop\Hb\node\node_modules\express\lib\router\index.js:284:15 {
code: 'PROTOCOL_ENQUEUE_HANDSHAKE_TWICE',
fatal: false
}
原因:每次请求都连接数据库一次造成,第一次成功,第二次以后失败
解决:将连接写出去
// 原
app.get('/a', (req, res) => {
con.connect(function(err) {
if (err) {
console.log('Error connecting to Database', err);
return;
}
console.log("Connected!");
// var sql = 'select * from jxgl.score;' // 配置无db
var sql = 'select * from score;' // 配置有db
// var sql = "INSERT INTO score (SNO, CNO) VALUES ('960010', '001')"; // 插入
con.query(sql, function(err, result, fields) {
if (err) {
console.log('sql error!', err);
return;
}
console.log("Result: " + result);
});
});
})
// 改
con.connect(function(err) {
if (err) {
console.log('Error connecting to Database', err);
return;
}
console.log("Connected!");
});
app.get('/a', (req, res) => {
// var sql = 'select * from jxgl.score;' // 配置无db
var sql = 'select * from score;' // 配置有db
// var sql = "INSERT INTO score (SNO, CNO) VALUES ('960010', '001')"; // 插入
con.query(sql, function(err, result, fields) {
if (err) {
console.log('sql error!', err);
return;
}
console.log("Result: " + result);
});
})
问题三
Error connecting to Database Error: Cannot enqueue Handshake after invoking quit.
at Protocol._validateEnqueue (C:\Users\xulon\Desktop\Hb\node\node_modules\mysql\lib\protocol\Protocol.js:215:16)
at Protocol._enqueue (C:\Users\xulon\Desktop\Hb\node\node_modules\mysql\lib\protocol\Protocol.js:138:13)
at Protocol.handshake (C:\Users\xulon\Desktop\Hb\node\node_modules\mysql\lib\protocol\Protocol.js:51:23)
at Connection.connect (C:\Users\xulon\Desktop\Hb\node\node_modules\mysql\lib\Connection.js:116:18)
at C:\Users\xulon\Desktop\Hb\node\node_mysql.js:45:6
at Layer.handle [as handle_request] (C:\Users\xulon\Desktop\Hb\node\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\xulon\Desktop\Hb\node\node_modules\express\lib\router\route.js:144:13)
at Route.dispatch (C:\Users\xulon\Desktop\Hb\node\node_modules\express\lib\router\route.js:114:3)
at Layer.handle [as handle_request] (C:\Users\xulon\Desktop\Hb\node\node_modules\express\lib\router\layer.js:95:5)
at C:\Users\xulon\Desktop\Hb\node\node_modules\express\lib\router\index.js:284:15 {
code: 'PROTOCOL_ENQUEUE_AFTER_QUIT',
fatal: false
}
sql error! Error: Cannot enqueue Query after invoking quit.
at Protocol._validateEnqueue (C:\Users\xulon\Desktop\Hb\node\node_modules\mysql\lib\protocol\Protocol.js:215:16)
at Protocol._enqueue (C:\Users\xulon\Desktop\Hb\node\node_modules\mysql\lib\protocol\Protocol.js:138:13)
at Connection.query (C:\Users\xulon\Desktop\Hb\node\node_modules\mysql\lib\Connection.js:198:25)
at C:\Users\xulon\Desktop\Hb\node\node_mysql.js:56:6
at Layer.handle [as handle_request] (C:\Users\xulon\Desktop\Hb\node\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\xulon\Desktop\Hb\node\node_modules\express\lib\router\route.js:144:13)
at Route.dispatch (C:\Users\xulon\Desktop\Hb\node\node_modules\express\lib\router\route.js:114:3)
at Layer.handle [as handle_request] (C:\Users\xulon\Desktop\Hb\node\node_modules\express\lib\router\layer.js:95:5)
at C:\Users\xulon\Desktop\Hb\node\node_modules\express\lib\router\index.js:284:15
at Function.process_params (C:\Users\xulon\Desktop\Hb\node\node_modules\express\lib\router\index.js:346:12) {
code: 'PROTOCOL_ENQUEUE_AFTER_QUIT',
fatal: false
}
node:events:491
throw er; // Unhandled 'error' event
^
end error! Error: Cannot enqueue Quit after invoking quit.
at Protocol._validateEnqueue (C:\Users\xulon\Desktop\Hb\node\node_modules\mysql\lib\protocol\Protocol.js:215:16)
at Protocol._enqueue (C:\Users\xulon\Desktop\Hb\node\node_modules\mysql\lib\protocol\Protocol.js:138:13)
at Protocol.quit (C:\Users\xulon\Desktop\Hb\node\node_modules\mysql\lib\protocol\Protocol.js:91:23)
at Connection.end (C:\Users\xulon\Desktop\Hb\node\node_modules\mysql\lib\Connection.js:239:18)
at C:\Users\xulon\Desktop\Hb\node\node_mysql.js:63:6
at Layer.handle [as handle_request] (C:\Users\xulon\Desktop\Hb\node\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\xulon\Desktop\Hb\node\node_modules\express\lib\router\route.js:144:13)
at Route.dispatch (C:\Users\xulon\Desktop\Hb\node\node_modules\express\lib\router\route.js:114:3)
at Layer.handle [as handle_request] (C:\Users\xulon\Desktop\Hb\node\node_modules\express\lib\router\layer.js:95:5)
at C:\Users\xulon\Desktop\Hb\node\node_modules\express\lib\router\index.js:284:15
Emitted 'error' event on Connection instance at:
at Connection._handleProtocolError (C:\Users\xulon\Desktop\Hb\node\node_modules\mysql\lib\Connection.js:423:8)
at Protocol.emit (node:events:513:28)
at Protocol._delegateError (C:\Users\xulon\Desktop\Hb\node\node_modules\mysql\lib\protocol\Protocol.js:398:10)
at Quit.<anonymous> (C:\Users\xulon\Desktop\Hb\node\node_modules\mysql\lib\protocol\Protocol.js:232:10)
at Quit.emit (node:events:513:28)
at Quit.Sequence.end (C:\Users\xulon\Desktop\Hb\node\node_modules\mysql\lib\protocol\sequences\Sequence.js:78:12)
at Quit.end (C:\Users\xulon\Desktop\Hb\node\node_modules\mysql\lib\protocol\sequences\Quit.js:24:28)
at C:\Users\xulon\Desktop\Hb\node\node_modules\mysql\lib\protocol\Protocol.js:236:14
at processTicksAndRejections (node:internal/process/task_queues:78:11) {
code: 'PROTOCOL_ENQUEUE_AFTER_QUIT',
fatal: false
}
原因:end() 位置不对,请求中最好不要关闭数据库连接,如果关闭过早,sql不能执行
解决:删掉 end()
// 原
con.connect(function(err) {
if (err) {
console.log('Error connecting to Database', err);
return;
}
console.log("Connected!");
});
app.get('/a', (req, res) => {
//var sql = 'select * from jxgl.score;' // 配置无db
var sql = 'select * from score;' // 配置有db
// var sql = "INSERT INTO score (SNO, CNO) VALUES ('960010', '001')"; // 插入
con.query(sql, function(err, result, fields) {
if (err) {
console.log('sql error!', err);
return;
}
console.log("Result: " + result);
});
con.end(function(err){
if (err) {
console.log('end error!', err);
return;
}
});
})
// 改
con.connect(function(err) {
if (err) {
console.log('Error connecting to Database', err);
return;
}
console.log("Connected!");
});
app.get('/a', (req, res) => {
// var sql = 'select * from jxgl.score;' // 配置无db
var sql = 'select * from score;' // 配置有db
// var sql = "INSERT INTO score (SNO, CNO) VALUES ('960010', '001')"; // 插入
con.query(sql, function(err, result, fields) {
if (err) {
console.log('sql error!', err);
return;
}
console.log("Result: " + result);
});
// con.end(function(err){
// if (err) {
// console.log('end error!', err);
// return;
// }
// });
})