700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > nodejs操作mysql查询返回的数据_nodejs连接mysql进行数据库查询返回前台数据的坑...

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

时间:2020-09-16 09:37:26

相关推荐

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

之前本来想用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如图

image.png

很明显这个地方是个rowdatapacket数据,而我们平时前台拿到的数据基本都是json格式,所以这里需要进行json的转换代码如下

getArticleList:function(){

var sql = 'SELECT * FROM article';

var article = '';

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

if(err){

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

return;

}else{

var dataString = JSON.stringify(result);

var data = JSON.parse(dataString);

console.log(data)

article = data;

}

});

}

return article;

}

打印结果如下

image.png

形如这种格式,数组内套json的才是前台需要的数据,上面这些的第一个坑,

坑2.因为js的单线程,异步操作,在发送数据给前台的时候需要进行异步操作的处理

在上面的代码中我在查询完数据后复制给article变量,最后将数据返回出去。正常来说,在express发送给前端的接口中直接获取数据返回就可以了,但是,恰恰不如愿,获取到的数据一直是空,这里就是因为js单线程,异步操作的原因,他不会等到数据查询完之后把数据复制给article,而是一直执行先的步骤,所以为了解决这个问题,我也是倒腾了一下午,最终的解决办法就是使用es6语法中的promise,解决异步操作。具体上代码

var dbCon=require('../db').dbCon;

dbCon.connect();

module.exports = {

/**

* @function 获取文章列表

*/

getArticleList:function(){

var sql = 'SELECT * FROM article';

var user = '';

var p = new Promise((res,rej)=>{

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

if(err){

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

return;

}else{

//坑1 查询的数据不是json 是一个rowdatapocket对象

var dataString = JSON.stringify(result);

var data = JSON.parse(dataString);

res(data);

}

});

});

return p;

}

}

这是一个简单promise,在这里我只是查询成功以后给其回调的函数res进行赋值调用,然后在函数最外面返回promise。而在接口中我们去调用,如下

var express = require('express');

var router = express.Router();

var Article = require('../models/user');

/* GET home page. */

router.get('/', function(req, res, next) {

res.render('index', { title: '登录' });

});

/* GET home page. */

router.get('/login', function(request, response, next) {

Article

.getArticleList()

.then((res,rej) =>{

response.send(res)

})

});

module.exports = router;

在接口中我们去调用getArticleList这个函数返回的是promise对象,在这个对象中我们去调用then(res,rej)其中res是在article.js文件中成功返回的内容就是我们进行数据的查询的内容。

然后在浏览器输入地址就可以获取到我们的数据,

如下

image.png

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。