最近在开发一个微信小程序,采用nodejs后台,在一个读取MySQL数据库并返回数据给前端的场景上遇到了问题,描述如下,忘各位高手相助。 先看代码:
module.exports = ctx=>{
var mysql = require('mysql');
var connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'wxb7e2f16d9e113148',
database: 'yhytest'
});
connection.connect();
var a='ini';
var sql = 'SELECT * FROM yhytesttable';
//查
connection.query(sql, function (err, result) {
if (err) {
a = err.message;
return;
}
a = result["0"].name;
});
ctx.state.data = {
msg: a
}
}
因为connection.query()是异步的,所以不等它返回结果,ctx.state.data就会先一步执行,从而无法获取从数据库查询回来的数据。而如果我把ctx.state.data的赋值写在connection.query()的响应函数里面,ctx.state.data可以被正确赋值,但返回到前端又显示data是空的。不知道是什么原因,希望各位可以提供思路,感激不尽~
https://q.cnblogs.com/q/105724/
没用node写过小程序,但我用node写过自己的网站。我是这样处理的
connection.query(sql, function (err, result) {
if (err) {
a = err.message;
return;
}else{
if( result.length ==0 ){
res.send('读取数据的条件错误,因为正常读取,我的length不会是0').end()
}else{
a = result["0"].name;
ctx.state.data = {
msg: a
}
}
}
1)不知道你这里的result['0 ']是什么意思。如果是读取数组的第一项数据,直接读取就好,0不需要加引号
2)既然读取数据是异步的,那就等数据读取完了,在传数据
我用node做网站后台传数据是这样的
if( result.length ==0 ){
res.send('读取数据的条件错误,因为正常读取,我的length不会是0').end()
}else{
a = result["0"].name;
res.render(''/index.ejs',{data:a})
}
希望对你有帮助。
可以去看我这篇文章https://blog.csdn.net/weixin_44000275/article/details/89883558#comments_12014331
如果不想看可以搜一下回调callback和node模块这两个关键词,应该可以解决你的问题