Как отправить содержимое нескольких коллекций MongoDB на маршрут для рендеринга с использованием Express? - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть две коллекции mongoDB (игроки и противники).Я хочу отправить содержимое обоих по одному и тому же маршруту, чтобы я мог использовать значения в разных контекстах.

Я использую следующий код, но получаю сообщение об ошибке allPlayers is not defined.Я подозреваю, что большая проблема заключается в том, что я не могу отправить два набора данных на create, используя res.render, как у меня.

Обычно я бы просто использовал: else {res.render (create,{allPlayers:players})} после обработки ошибок, но, очевидно, не могу этого сделать, если я хочу также отправить второй набор данных.

Я новичок в выражениях / монго и т. Д., Поэтому, вероятно, совершаю глупую ошибку, но любая помощь будет принята.

app.get("/create", function(req,res){
  Player.find({}, function(err, allPlayers){
    if (err){
        console.log("There is an error")
    }
  });
  Opponent.find({}, function(err, allOpponents){
   if (err){
    console.log("There is an error")
   } 
  });
  res.render("create", {players: allPlayers, opponents: allOpponents});
});

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Пожалуйста, попробуйте следующий код:

app.get("/create", (req,res) => {
  Player.find({}, function(err, allPlayers){
   if (err){
       console.log("There is an error")
   }
   else{
      Opponent.find({}, function(err, allOpponents){
       if (err){
           console.log("There is an error")
         } 
        else 
          res.render("create", {players: allPlayers, opponents: allOpponents});
      });
    }
  });
});

Вы должны подождать, пока оба запроса вернут ваш результат, прежде чем делать res.render.Я добавил запросы в callbacks.

Дайте мне знать, если это поможет.

0 голосов
/ 28 сентября 2018

Сделайте следующее с вашим кодом.Это должно решить вашу проблему (с последним синтаксисом).«allPlayers» не был определен, потому что вы ссылались на него вне области обратного вызова.

app.get("/create", async (req,res) => {
   const players = await Player.find({}, function(err, allPlayers){
       if (err){
           console.log("There is an error")
       }
   });
   const opponents = await Opponent.find({}, function(err, allOpponents){
      if (err){
          console.log("There is an error")
      } 
   });
   res.render("create", {players, opponents});
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...