我想计算一张包含FOO表的表格中的一行。 以下代码有一个错误,只显示最后一个db_name。
var b; // without this line it would still work, since
// b would implicitely become a global variable in a()
function a(){
// function b(){ ... would *not* work here
b=function(){
alert('In');
}
}
a();
b();
您能否建议我如何修复nodejs代码?
RESULT IS LOOK LIKE THIS:
db_0099,0
db_0099,5
db_0099,10
db_0099,3
答案 0 :(得分:1)
我建议对这个问题采取两步解决方案:
使用连接池
var pool = mysql.createPool({ 主持人:'xxxxx', 用户:'xxxxx', 密码:'xxxxx', connectionLimit:100 });
池可以进行自动连接,所以不要连接到你的数据库,只需
pool.query(sql,function(err,res){})
这样您就可以为每个查询使用一个连接,在使用它之后将自动关闭。
为此创建一个返回promise
的getResult函数function getResult(sql){
return new Promise(function(resolve,reject){
pool.query(sql, function(err, result){
if(err){
reject(err)
}else{
resolve(result)
}
})
})
}
然后你可以等待循环中的每个查询
pool.query(sql1, async function(err, result) {
if (err) throw err;
for (var i = 0; i < result.length; i++) {
var db_name = result[i].db_name;
console.log(db_name);
var sql = sql2.replace("{0}",db_name)
var res = await getResult(sql)
console.log(db_name+','+res[0].solution); //Here db_name is showed only the last one.
};
pool.end()
});
P.S。:async await是4月份upcomming节点8.0.0发布的一个特性。对于节点7.x,您必须使用命令行开关
启动脚本node --harmony-async-await yourscript.js
答案 1 :(得分:0)
您是否验证了结果的内容? 的console.log(结果);
如果可以的话试试这个:
solutions = results.map(result => {
let dbName = result.db_name;
let queryResult;
connection.query(sql2.replace("{0}", dbName), function(err, result) {
if (err) {
throw err;
} else {
queryResult = `${db_name}, ${result[0].solution}`
console.log(queryResult);
}
});
return queryResult;
})
console.log(solutions);
但是,请尝试使用ORM或sql解析器进行查询!
试试这个:)