nodeJs,运行两次sql可以将它们组合成json

nodeJs , run sql twice can combine them to json

本文关键字:组合 json sql 运行 两次 nodeJs      更新时间:2023-09-26

我正在使用node js构建api。这是我的代码

var keyword = req.body.keyword;
var sql = "SELECT xxxx WHERE xxx";
  connection.query(sql,function (err,row){
   if(err) {
    res.json({"Error" : true});
   } else {
    res.json({"Result" : row});
    }
  });

然后,我得到了结果

{
  "Result": [
    {
  "xxx": xxx,
  "yyy": "yyyy"
  }
 ]
}

但是现在,我需要将许多sql结果合并为一个json。

{"ResultA":[{"xxx","xxx" , "yyy":"yyyy"}] , 
"ResultB":[{"xxx","xxx" , "yyy":"yyyy"}] , 
"ResultC":[{"xxx","xxx" , "yyy":"yyyy"}]  }

我可以将结果存储在sql的变量中然后运行:

res.json({"ResultA" : a , "ResultB" :b , "ResultC":c});

得到结果?

我试图复制代码并添加

res.write(",");

链接 jsons ,但它告诉我结束后我无法写。

您需要先收集整个响应,然后再将其发送回客户端。这意味着缓冲每个查询的输出。例如:

var results = [];
connection.query('SELECT xxx FROM yyyy', function(err, row) {
  if (err)
    result.push({ErrorA: true});
  else
    result.push({ResultA: row});
  onFinish();
});
connection.query('SELECT xxx FROM yyyy', function(err, row) {
  if (err)
    result.push({ErrorB: true});
  else
    result.push({ResultB: row});
  onFinish();
});
connection.query('SELECT xxx FROM yyyy', function(err, row) {
  if (err)
    result.push({ErrorC: true});
  else
    result.push({ResultC: row});
  onFinish();
});
function onFinish() {
  if (results.length === 3)
    res.json(results);
}

如果您不需要使用特定于查询的结果键名称(例如 ResultAResultB等(结果顺序无关紧要:

var results = [];
var queries = [
  'SELECT xxxx FROM yyyy',
  'SELECT xxxx FROM yyyy',
  'SELECT xxxx FROM yyyy'
];
for (var i = 0; i < queries.length; ++i)
  connection.query(queries[i], onResult);
function onResult(err, row) {
  if (err)
    results.push({Error: true});
  else
    results.push({Result: row});
  if (results.length === queries.length)
    res.json(results);
}