Как я могу гарантировать, что объект будет добавлен в коллекцию через 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)") или что он выдает ошибку, если это необходимо.
Спасибо.