我通过输入以下命令提示符命令创建了一个React项目
mkdir mysql-test && cd mysql-test
npm init -y
npm install mysql -save
然后我创建了一个名为app.js的文件,并输入以下代码:
// app.js
const mysql = require('mysql');
// First you need to create a connection to the db
const con = mysql.createConnection({
host: 'rds-mysql-wmcw.cgz0te1dlkah.us-east-1.rds.amazonaws.com',
user: 'masterUsername',
password: 'masterPassword',
database : 'db_wmcw'
});
//try to connect to the mySql database. If an error occurs, display an
error message on the console
con.connect((err) => {
if(err){
console.log('Error connecting to Db');
return;
}
//a connection has been established to the database. Now, run a query against the table 'homepage'
//to retrieve each row and all columns of the table
console.log('Connection established');
con.query('SELECT * FROM homepage', (err,rows) => {
//if an error occurs when reading the data from the table, display the error on the console
if(err) {
console.log(err);
return;
}
//data has been retrieved from the table. display the data to the console
console.log('Data received from Db:\n');
console.log(rows);
});
});
con.end((err) => {
// The connection is terminated gracefully
// Ensures all previously enqueued queries are still
// before sending a COM_QUIT packet to the MySQL server.
});
在我添加con.query命令之前,当我在命令提示符下键入app.js时,响应是建立连接。所以我知道我正在连接到mySql数据库。当我包含con.query命令,并在命令提示符下键入app.js时,我收到以下错误:
已建立连接{错误:在调用退出后无法将查询排入队列。在Protocol._enqueue(C:\ jrs \ codercamp \ mysql-test \ node_modules \)的Protocol._validateEnqueue(C:\ jrs \ codercamp \ mysql-test \ node_modules \ mysql \ lib \ protocol \ Protocol.js:203:16)中mysql \ lib \ protocol \ Protocol.js:138:13)在Handshake.con.connect的Connection.query(C:\ jrs \ codercamp \ mysql-test \ node_modules \ mysql \ lib \ Connection.js:200:25)握手时(C:\ jrs \ codercamp \ mysql-test \ app.js:21:7)。 (C:\ jrs \ codercamp \ mysql-test \ node_modules \ mysql \ lib \ Connection.js:502:10)在Handshake._callback(C:\ jrs \ codercamp \ mysql-test \ node_modules \ mysql \ lib \ Connection。 js:468:16)Handshake.Sequence.OkPacket(C)握手.Sequence.end(C:\ jrs \ codercamp \ mysql-test \ node_modules \ mysql \ lib \ protocol \ sequences \ Sequence.js:83:24) :\ jrs \ codercamp \ mysql-test \ node_modules \ mysql \ lib \ protocol \ sequences \ Sequence.js:92:8)在Protocol._parsePacket(C:\ jrs \ codercamp \ mysql-test \ node_modules \ mysql \ lib \) protocol \ Protocol.js:278:23)在Parser.write(C:\ jrs \ codercamp \ mysql-test \ node_modules \ mysql \ lib \ protocol \ Parser.js:76:12)代码:'PROTOCOL_ENQUEUE_AFTER_QUIT',致命:假的
它位于错误顶部,表示在调用quit后无法将Query排入队列。我不明白为什么系统认为我在调用quit后执行查询。我不是在调用quit,除非在执行con.end时会发生这种情况,但是con.end是要执行的最后一个语句。它是在查询调用之后的方式。
非常感谢任何帮助。
谢谢。
PS - 我已经包含了主机名,用户ID,密码和数据库名称,以便于调试。数据库中没有真正重要的数据
好的,所以替代解决方案是卸载mysql
包并改为使用mysql2
包。正如作者所说:
MySQL2主要与mysqljs API兼容,并支持大多数功能
这个答案是提问者对他的帖子的评论
如果你真的想重新分配一行数据,你可以这样做:
const { product_detail, product_description } = results[0];
这是基本语法:D(可能是ES6)