Member 14126318 Ответов: 0

Как я могу гарантировать, что объект будет добавлен в коллекцию через node/express и mongoose?


У меня есть маршрут в Node/express, который предназначен для добавления объекта из представления формы req.body в коллекцию mongodb (с использованием мангуста). Мой код прекрасно работал для меня как локально, так и онлайн, но потом коллега сказал мне, что когда он тестировал его, он работал только в google chrome, а не в других браузерах, и что страница просто "мигала", и ничего не добавлялось.

Мое лучшее предположение заключается в том, что объект, добавляющийся в коллекцию, иногда "проигрывает гонку" до того, как коллекция будет сохранена и программа двинется дальше.

Что я уже пробовал:

Первоначально мой код просто включал обещание:

router.post("/input/:id", ensureAuthenticated, async (req, res) => {
   Project.findOne({
     _id: req.params.id
   }).then(project => {
     const newInput = {
       inputTitle: req.body.inputTitle,
       inputValue: req.body.inputValue,
     };
     // Add to array
       
     project.inputs.unshift(newInput);
        
     project.save().then(project => {
       res.redirect(`/projects/output/${project.id}`);
     });
   });
 });


Затем я изменил его, включив блок try/catch и async/await:

router.post("/input/:id", ensureAuthenticated, async (req, res) => {
  try {
     const newInput = {
        inputTitle: req.body.inputTitle,
        inputValue: req.body.inputValue,
      };
     const project = await Project.findOne({
     _id: req.params.id
     });

     project.inputs.unshift(newInput);

     await project.save();
     res.redirect(`/projects/output/${project.id}`);
      } catch (e) {
        res.send(e);
      }
  });


Я не слишком горяч на async/await и т. д., И я очень нервничаю по поводу запуска этого приложения в производство, поскольку это азартная игра, независимо от того, будет ли объект добавлен в массив или нет. Является ли второй метод более совершенным? Это "ожидание", но я не уверен, что это какое-то улучшение по сравнению с первым методом.

Если бы кто-нибудь мог мне помочь, я был бы очень благодарен, мне просто нужно убедиться, что объект действительно добавлен в коллекцию (строка " project.inputs.unshift(newInput)") или что он выдает ошибку, если это необходимо.

Спасибо.

0 Ответов