Node.js作为响应管理数组

时间:2018-11-17 11:59:49

标签: node.js ajax mongodb api express

我有一个API,可以从客户端接收ajax调用并管理响应以显示接收到的数据。

响应是由mongodb集合中的所有文档填充的对象数组,但是到达时为空。

服务器中的脚本正常工作,我可以在发送之前记录阵列,我搜索了很多主题,但没有合适的内容。

服务器:

app.route('/api/issues/:project')    
   .get(function (req, res) {
     var project = req.params.project;
     var result = [];
     mongo.connect(process.env.DATABASE, (err, db) => {
       if (err) {
         console.log('Database error: ' + err);
       } else {
         console.log('getting...');
         db.collection('apitest').find().forEach(element => {
           result.push(element);
         });
         console.log(result);
         res.send(result);
       };
     }
     );
   })

客户

$(function() {
  var currentProject = window.location.pathname.replace(/\//g, "");;
  var url = "/api/issues/"+currentProject;
  $('#projectTitle').text('All issues for: '+currentProject);
  $.ajax({
    type: "GET",
    url: url,
    success: function(data)
    {
      console.log(this);
      var issues= [];
      data.forEach(function(ele) {
        console.log(ele);
        var openstatus;
        (ele.open) ? openstatus = 'open' : openstatus = 'closed';
        var single = [
        // example
        '<div>' + ele.property + '</div>',
        '<div>' + ele.property + '</div>',
        '<div>' + ele.property + '</div>'                
        ];
        issues.push(single.join(''));
      });
      $('#issueDisplay').html(issues.join(''));
    }
  });
});

更新:

我找到了问题和“解决方案”。问题是该调用是异步的,因此在结果与值为空数组的情况下,在连接到db和数组填充之前,响应开始。

我已经解决了将响应包含在setTimeout中的问题,但是我不确定管理这种情况的正确方法。如果有人可以建议我一些有关异步的初学者阅读,我真的很感激。

setTimeout(function () {
  res.send(result);
}, 50);

0 个答案:

没有答案