Express - объединить роутеры - PullRequest
       88

Express - объединить роутеры

0 голосов
/ 07 августа 2020

1 - Цель

Я пытаюсь достичь основной панели инструментов для отображения профиля вошедшего в систему пользователя и других профилей, а также сообщений. Подобно панели инструментов Linkedin после входа в систему. Однако панель инструментов недоступна, пока пользователь не создаст профиль.

2 - Попытка

На данный момент у меня есть только:

Получить весь маршрутизатор

router.get("/", async (req, res) => {
  try {
    const allProfiles = await Profile.find().populate("user", [
      "name",
      "avatar",
    ]);
    res.json(allProfiles);
  } catch (err) {
    console.error(err.message);
    res.status(500).send("Server not working");
  }
});

и маршрутизатор профиля пользователя

router.get("/me", auth, async (req, res) => {
  try {
    //see if there is a profile
    const profile = await Profile.findOne({
      user: req.user.id,
    }).populate("user", ["name", "avatar"]);

    if (!profile) {
      return res
        .status(400)
        .json({ msg: "There is no profile for this user " });
    }
    //get profile data
    res.json(profile);
  } catch (err) {
    console.error(err.message);
    res.status(500).send("Server error");
  }
});

Теоретически моя идея состоит в том, чтобы создать комбинацию между двумя маршрутизаторами, однако я не знаю как это сделать.

router.get("/all", async (req, res) => {
  try {
    //see if there is a profile
    const profile = await Profile.findOne({
      user: req.user.id,
    }).populate("user", ["name", "avatar"]);

    if (!profile) {
      return res
        .status(400)
        .json({ msg: "There is no profile for this user " });
    }

    //if there is a profile show other profiles
    const allProfiles = await Profile.find().populate("user", [
      "name",
      "avatar",
    ]);

    //How to combine the two ???
    //profile.push(allProfiles);

    res.json(profile);
  } catch (err) {
    console.error(err.message);
    res.status(500).send("Server not working");
  }
});

3 - Проблемы

Я протестировал панель управления, и она отлично работает, если я подключаюсь только к пользовательскому API «/ me». Однако он не поддерживает другие профили на той же странице. Отсюда и моя мысль о создании комбинированного маршрутизатора.

Компонент приборной панели -

const Dashboard = ({
  getProfile,
  auth: { user },
  profile: { profile, loading },
}) => {
  useEffect(() => {
    getProfile();
  }, [getProfile]);

  return (
    <Fragment>
      {loading && profile === null ? (
        <Spinner />
      ) : (
        <Fragment>
          {profile !== null ? (
            <ProfileDashboard profile={profile} />
          ) : (
            <NoProfile userName={user && user.name} />
          )}
        </Fragment>
      )}
    </Fragment>
  );
};

Извините за длинный пост, надеюсь, это имеет смысл. Я ценю любые предложения. Спасибо

...