Node.js управляет массивом в ответ - PullRequest
0 голосов
/ 17 ноября 2018

У меня есть 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(''));
    }
  });
});

Обновление:

Я нашел проблему и «решение».Проблема в том, что вызов асинхронный, поэтому перед подключением к БД и заполнению массива ответ начинается, когда значением результата является пустой массив.

Я решил включить ответ в setTimeout, но я не уверен, что это правильный способ справиться с этим делом.Если кто-нибудь может предложить мне некоторые начальные чтения об асинхронных, я действительно ценю это.

setTimeout(function () {
  res.send(result);
}, 50);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...