nodejs操作mysql查询返回的数据_nodejs连接mysql进行数据库查询返回前台数据的坑...

本文讲述了在Node.js中使用MySQL查询数据库时遇到的两个问题及解决方案。首先,查询结果是RowDataPacket类型,需要转换为JSON格式;其次,由于JavaScript的异步性质,直接返回查询结果会导致数据为空。通过使用Promise解决异步操作问题,确保数据正确传递到前端。
摘要由CSDN通过智能技术生成

之前本来想用mongodb进行数据库的操作,后来一想自己之前简单的用过mysql,就直接使用了mysql,一下午的时间一直走在nodejs查询数据然后返回给前台的这个过程,怎么说呢,在这个过程遇到了两个深坑。这两个坑都是在model中查询的数据不能返给前台遇到的。具体是啥呢就一步一步的走下去

坑1.查询到的数据需要进行json转换

在model中进行数据的查询后,一直获取的是RowDataPacket数据,而不是真正的json数据格式,如下

models层中的article.js

module.exports = {

getArticleList:function(){

var sql = 'SELECT * FROM article';

var user = '';

dbCon.query(sql,function (err, result) {

if(err){

console.log('[SELECT ERROR] - ',err.message);

return;

}else{

console.log(result)

}

});

}

}

控制台打印result如图

6af5448c380a

image.png

很明显这个地方是个rowdatapacket数据,而我们平时前台拿到的数据基本都是json格式࿰

在 Node.js 使用数据进行查询操作时,可以使用回调函数或 Promise 来获取查询返回数据。 使用回调函数的方式,可以在查询语句执行完成后,将查询结果作为参数传递给回调函数。例如: ``` const mysql = require('mysql'); const connection = mysql.createConnection({ host: 'localhost', user: 'root', password: 'password', database: 'example_db' }); connection.connect(); connection.query('SELECT * FROM users', (error, results, fields) => { if (error) throw error; console.log(results); }); connection.end(); ``` 在上面的示例,当查询语句执行完成后,会调用传递的回调函数,并将查询结果作为第二个参数传递给回调函数。 使用 Promise 的方式,可以使用 Node.js 的 `util` 模块的 `promisify` 方法将 Node.js 的回调函数转换为 Promise。例如: ``` const mysql = require('mysql'); const util = require('util'); const connection = mysql.createConnection({ host: 'localhost', user: 'root', password: 'password', database: 'example_db' }); const query = util.promisify(connection.query).bind(connection); connection.connect(); query('SELECT * FROM users') .then((results) => { console.log(results); }) .catch((error) => { throw error; }) .finally(() => { connection.end(); }); ``` 在上面的示例,使用了 `util.promisify` 方法将 `connection.query` 方法转换为 Promise。然后可以通过 `then` 方法获取查询结果,或者通过 `catch` 方法捕获查询错误。最后,使用 `finally` 方法关闭数据连接
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值