Async Await with Mongoose возвращает пустой объект - PullRequest
0 голосов
/ 04 октября 2018

У меня есть схема mongoose для профиля пользователя, куда они могут добавить опыт работы (в настоящее время это массив объектов в схеме).

Я использовал следующий код, чтобы найти профиль пользователя и получить объект опытав качестве входных данных затем присоедините его к массиву в схеме и верните сохраненный профиль с опытом:

Router.post('/experience',
Passport.authenticate('jwt', {session: false}), async (req, res) => {
try {
    const myProfile = await Profile.findOne({user: req.user._id});

    if (myProfile) {
        const exp = {
            title: req.body.title,
            company: req.body.company,
            location: req.body.location,
            from: req.body.from,
            to: req.body.to,
            isCurrent: req.body.isCurrent,
            description: req.body.description
        };
        // add to Profile experience array
        Profile.experience.unshift(exp); // adds to beginning of array
        const savedProfile = await Profile.save(); // have also tried myProfile.save() but that doesn't work too
        if (savedProfile) {
            console.log(savedProfile);
            res.json({message: `Profile Updated Successfully`, details: savedProfile})
        }
        else { throw `Experience Details Not Saved`}
    }

} catch (err) { res.json(err); }
});

Проблема здесь в том, что ответ всегда является пустым объектом, и когда я проверяю свою базу данных, опыта нетсохранены.Этот код неправильный?То же самое работает с Обещаниями, но я хочу попробовать новый способ ведения дел.

1 Ответ

0 голосов
/ 04 октября 2018

Шаблон async-await - это еще один способ записи Promise, возвращаемое значение функции Promise.resolve(result) или Promise.reject(reason) всего асинхронного.

Во внешней функции Router.postв этом случае он должен использовать шаблон async-await или then из Promise, чтобы иметь дело с возвращенным Promise.Orelse, функция async не сможет запускаться, так как возвращаемое значение Promise будет опущено.

...