使用MySQL的简单React无法读取表记录

时间:2018-07-20 22:51:16

标签: mysql reactjs

我通过输入以下命令提示符命令创建了一个React项目

  

mkdir mysql-test && cd mysql-test

     

npm初始化–y

     

npm安装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时,响应将返回Connection建立。所以我知道我正在连接到mySql数据库。当我包含con.query命令并在命令提示符下键入app.js时,出现以下错误:

建立连接 {错误:调用退出后无法排队查询。     在Protocol._validateEnqueue(C:\ jrs \ codercamp \ mysql-test \ node_modules \ mysql \ lib \ protocol \ Protocol.js:203:16)     在Protocol._enqueue(C:\ jrs \ codercamp \ mysql-test \ node_modules \ mysql \ lib \ protocol \ Protocol.js:138:13)     在Connection.query(C:\ jrs \ codercamp \ mysql-test \ node_modules \ mysql \ lib \ Connection.js:200:25)     在Handshake.con.connect(C:\ jrs \ codercamp \ mysql-test \ app.js:21:7)     在握手。 (C:\ jrs \ codercamp \ mysql-test \ node_modules \ mysql \ lib \ Connection.js:502:10)     在握手._callback(C:\ jrs \ codercamp \ mysql-test \ node_modules \ mysql \ lib \ Connection.js:468:16)     在Handshake.Sequence.end(C:\ jrs \ codercamp \ mysql-test \ node_modules \ mysql \ lib \ protocol \ sequences \ Sequence.js:83:24)     在Handshake.Sequence.OkPacket(C:\ 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后认为我正在执行查询。我不会调用quit,除非那是我执行con.end时发生的情况,但是con.end是要执行的最后一条语句。这是查询调用之后的方式。

非常感谢您的协助。

谢谢。

PS-我提供了主机名,用户ID,密码和数据库名,以简化调试。数据库中没有真正重要的数据

1 个答案:

答案 0 :(得分:1)

好的,因此替代解决方案是卸载mysql软件包并改为使用mysql2软件包。正如作者所说:

  

MySQL2主要与mysqljs兼容,并支持大多数功能

此答案用于提问者对其帖子的评论

如果您确实想重新分配一行数据,则可以执行以下操作:

const { product_detail, product_description } = results[0];

这是基本语法:D(也许是ES6)