Пн goose не извлекает данные, пока я не обновлю sh соединение с базой данных - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь повторно извлечь данные из MongoDB, используя mon goose каждый раз, когда пользователь перезагружает страницу. Однако старые данные остаются там, а новые данные не извлекаются, пока я не перезапущу сервер.

Вот маршрутизатор:

router.post("/dashboard", (req, res) => {
  const userId = req.body.userId;
  User.findOne({ _id: userId }, (err, users) => {
    if (err) {
      console.log(err);
      res.status(500).send();
    } else {
      router.get("/dashboard", (req, res, next) => {
        const leagues = [users.leagues.premium, users.leagues.free];
        if (err) return next(err);
        res.status(200).send(leagues);
      });
    }
  });
}); 

А вот действия (Redux) :

export const fetchLeagues = userId => dispatch => {
  axios.post("/api/leagues/dashboard", userId).then(
    setTimeout(function() {
      axios.get("/api/leagues/dashboard").then(leagues => {
        dispatch({
          type: GET_LEAGUES,
          payload: leagues
        });
      });
    }, 50)
  );
};

Данные должны быть получены от определенного пользователя c, поэтому я публикую идентификатор пользователя, а затем возвращаю данные. Не уверен, что это лучший способ сделать это.

Просто чтобы прояснить, я использую стек MERN с redux и ax ios для выполнения этого. Я пытался использовать это: MongoDB не обновляет sh данные автоматически? , но я все еще не могу заставить эту вещь обновлять / повторно извлекать данные при повторном вызове маршрутизатора. Спасибо.

1 Ответ

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

Выполнение запроса POST, тогда запрос GET здесь не требуется, поскольку вы можете просто вернуть данные в одном запросе.

Причина, по которой данные сохраняются, заключается в том, что при объявлении маршрута router.get('/dashboard') вы постоянно жестко программируете этот маршрут, чтобы иметь значения из первого запроса.

Вероятно, лучше использовать запрос GET, поскольку именно это вы пытаетесь сделать.

например

router.get("/dashboard/:userId", (req, res) => {
  const userId = req.params.userId;
  User.findOne({ _id: userId }, (err, users) => {
    if (err) {
      console.log(err);
      res.status(500).send();
    } else {
      const leagues = [users.leagues.premium, users.leagues.free];
      if (err) return next(err);
      res.status(200).send(leagues);
    }
  });
}); 
// Where userId is now a string
export const fetchLeagues = userId => dispatch => {
  axios.get(`/api/leagues/dashboard/${userId}`).then(leagues => {
    dispatch({
      type: GET_LEAGUES,
      payload: leagues
    });
  });
};
...