Стек MERN: может ли маршрут ExpressJs добавить данные из одной модели в атрибут массива другой модели? - PullRequest
0 голосов
/ 26 марта 2020

Надеюсь, я правильно сформулировал это. Позвольте мне объяснить.

Я создаю приложение, в котором пользователи могут организовывать турниры для игры (отдельно).

Я создаю это приложение со стеком MERN, а также с Redux.

У меня определено множество маршрутов, например, для функции CRUD и аутентификации пользователя. Мой текущий рабочий процесс состоит в том, чтобы создать внутренний маршрут, протестировать его с помощью Postman, и как только он заработает, я создаю редуктор / действие Redux.

У меня есть две модели данных. Один пользователь, а другой - турнир. Модель турнира имеет несколько атрибутов типа String, таких как «title», и один из ее атрибутов - «members», тип Array.

Я пытаюсь написать запрос Post в турнир /: id, который содержит имя пользователя.user и pu sh (), которые в массиве Tournament.participants.

Я пробовал несколько вещей, но мой текущий код выглядит как

router.post('/:id', (req, res) => {
  Tournament.findById(req.params.id)
    .then(tournament => tournament.participants.push(req.body))
    .catch(err => res.json(err))
});

Я потерян и мог бы использовать помощь. Спасибо всем

1 Ответ

1 голос
/ 26 марта 2020

Это может сработать, я думаю:

router.post('/:id', (req, res) => {
  Tournament.findById(req.params.id)
    .then(tournament => {
      tournament.participants.push(req.body)
      // save the updated tournament to the DB and take advantage of Promise-chaining
      return tournament.save()
    })
    // send a response to the client
    .then(savedTournament => res.json(savedTournament))
    .catch(err => res.json(err))
});

Вам просто нужно сохранить обновленный турнир в БД с такой строкой:

return tournament.save()

Тогда это вернется Обещание, которое вы можете связать, а затем отправить в случае успеха ответ. Вы извлекали модель из БД и обновляли массив участников, но затем вам нужно сохранить ее в БД и отправить ответ клиенту.

...