在nodejs中创建一个嵌套数组

时间:2018-02-14 07:01:22

标签: javascript mysql node.js

我有一个表名master_surveys,master_questions和master_answers。从那些表我想为json查询创建一个嵌套数组结果,我遇到了一些问题因为结果无法给出任何响应

i tried at postman

我已经搜索了什么问题,但似乎问题是在这个代码然后我试图改变代码但错误变得那么多,所以我决定保留第一个代码

这是我的代码

this.getSurvey = function(req,res,next) {
var id = req.query.id;
 connection.acquire(function(err,con){
  var survey = 'SELECT ms.id ,ms.title, ms.created_at, count(mq.id) question FROM master_surveys ms, master_questions mq WHERE ms.id=mq.survey_id';
  con.query(survey, function(err,data){
    if (data.length > 0) {
      var survey = data[0];
      var question = 'SELECT mq.id, mq.title, mq.type, mq.survey_id FROM master_surveys ms, master_questions mq WHERE ms.id=mq.survey_id and ms.id="'+survey.id+'"';
      con.query(question, function(err, data){
        if (data.length > 0) {
          var answer = 'SELECT ma.id, ma.title, ma.selected_answer, ma.question_id FROM master_questions mq, master_answers ma WHERE mq.id=ma.question_id and mq.id="'+id+'"';
          con.query(answer, function(err, data){
            if(data.length>0){
              question.data = data;
            }
            if (data.question== null) {
              survey.data = [];
            }
            survey.data.push(question);
          }), function (err) {
            if (survey.questions.length == questions.length) {
          res.json(survey);
        }
          }
          ;
        };
      });
    };
  });
});

};

1 个答案:

答案 0 :(得分:0)

当您的查询未返回任何结果或甚至发出错误时,您都不会回答http请求。我建议首先从一个简单的查询开始:

con.query('SELECT * FROM your_table', function(err, data) {
    if(err)
        // TODO reply the HTTP request with an appropriate error code
    else {
        if(data.length > 0) {
            // TODO parse the result and form you json object
            res.json(/* your json object */);
        }
        else {
            res.json({}); // for example
        }
    }
});

只有在你得到它之后才能改进它,直到你得到你想要的结果。

你不应该像这样串行执行几个sql查询,或者至少尽可能少。 JOIN clause肯定是要走的路。

最后,您还应该知道您的代码是针对SQL注入打开的,请参阅this post