Как использовать данные от маршрута Express до маршрута React Router - PullRequest
0 голосов
/ 21 марта 2020

У меня есть маршрут express, который выполняется после того, как nodemailer отправит пользователю электронное письмо с подтверждением.

router.route('/confirmation/:token').get((req, res, next) => {
  try {
    Token.findOne({ token: req.params.token }, function(err, token) {
      if (err)
        return res.status(404).send({
          type: 'not-verified',
          msg: 'We were unable to find a valid token. Your token my have expired.'
        });
      // If we found a token, find a matching user
      User.findOne({ _id: token._userId, email: req.body.username }, function(err, user) {
        if (err)
          return res
            .status(404)
            .send({ msg: 'We were unable to find a user for this token.' });
        if (user.isVerified)
          return res.status(400).send({
            type: 'already-verified',
            msg: 'This user has already been verified.'
          });

        // Verify and save the user
        user.isVerified = true;
        user.save(function(err) {
          if (err) {
            return res.status(500).send({ msg: err.message });
          }
          return res
            .status(200)
            .send({
              msg: [
                'The account has been verified. Please log in.',
                { userVerified: user.isVerified }
              ]
            })
            .redirect('/login');
        });
      });
    });
  } catch (err) {
    return next(err);
  }
});

E-mail:

Здравствуйте! Пожалуйста, подтвердите свой аккаунт по нажав на ссылку: http://localhost: 8016 / пользователи / подтверждение / a217ba992e977079eeeca541677fedcb

Естественно и ожидаемо, что мне потребуется: http://localhost:8016/users/confirmation/a217ba992e977079eeeca541677fedcb

И получить как ответ:

{
  "msg": [
  "The account has been verified. Please log in.",
  {
   "userVerified": true
  }
 ]
}

Но я хочу использовать эти данные через маршрутизатор React. Чтобы сделать модальный или другой компонент, используйте его. По сути, получить эти данные для поддержки моих маршрутов на клиенте.

Что-то вроде:

function PrivateRoute({ children, ...rest }) {
  return (
    <Route
      {...rest}
      render={({ location, props }) =>
        isLoggedIn ? (
          children
        ) : (
          <Redirect
            to={{
              pathname: '/',
              state: { from: location }
            }}
          />
        )
      }
    />
  );
}

  <PrivateRoute path={`/users/confirmation/${params.token}`}>
    {
      <Modal
        isAlertModal={false}
        history={history}
        affirmativeUsed="Yes"
        message="You have now completed your registration!"
        modalActive={true}
      />
    }
  </PrivateRoute>

Заранее спасибо!

1 Ответ

0 голосов
/ 21 марта 2020

Это не так, как это работает. Нажмите конечную точку / Подтверждение в одном из ваших компонентов React и сохраните результат в хранилище Redux. Затем подключите любой компонент React, которому необходим доступ к этому токену, к хранилищу Redux.

...