NodeJS перенаправить сайт после рендера - PullRequest
0 голосов
/ 13 марта 2020

Сейчас я разрабатываю простое приложение NodeJS и Express, которое получает некоторые данные, выполняет серию вызовов POST и перенаправляет их на другой сайт. Приложение должно иметь вид спереди простого экрана загрузки, а после того, как будет выполнено последнее «POST», должно перенаправить вас на внешний сайт.

Проблема, с которой я сталкиваюсь, заключается в следующем:

У меня есть этот код, который выполняет все, что нужно, в части logi c.

router.get('/:data', function (req, res) {
  res.render('index', { title: 'Express' })

   /**
   * Decodes a JWT token to retrieve the data
   * @param {string} token 
   */
  function decodeJWT(token) {
    let base64Url = token.split('.')[1];
    let base64 = base64Url.replace('-', '+').replace('_', '/');
    let decodedData = JSON.parse(Buffer.from(base64, 'base64').toString('binary'));

    return decodedData;
  }

  try {
    var data = decodeJWT(req.params.data);
    let brandId = data['payload']['data']['brandId'] || null;
    let deviceId = data['payload']['data']['deviceId'] || null;
    let products = data['payload']['data']['products'] || null;

    let brand = brands[brandId];
    let postUrl = brand['postUrl'];

    if (products && products.length > 0) {
      let series = [];

      products.forEach((product, index) => {
        series.push(function (callback) {
          setTimeout(function () {
            let credentials = '';
            credentials += 'username=' + encodeURIComponent('username');
            credentials += '&password=' + encodeURIComponent('password');

            axios.post('url', credentials)
              .then(response => {   
                if (index + 1 === products.length) {
                  res.redirect(brand['url']);
                  res.end()
                } else {
                  callback(null, (products.length - index) * 100)
                }
              })
              .catch(e => console.log(e))
          })
        })
      })

      async.series(series, function (error, results) {
        console.log(error, results);
      })
    }
  } catch (e) {
    console.log(e)
  }
})

И это вид спереди.

<!DOCTYPE html>
<html>
  <head>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
    <div class="container">
      <div class="loading-container">
          <img src="/images/logo.png" />
          <div class="loader">Loading...</div>
      </div>
  </div>
  </body>
</html>

Цикл должен быть примерно таким: пользователь перенаправляется на страницу / приложение, где он видит значок загрузки, приложение извлекает JWT из параметров и после его декодирования делает несколько вызовов 'POST' для указанного c конечная точка. После последнего вызова приложение должно перенаправить пользователя на другой, внешний URL-адрес (например, https://www.google.com/).

Проблема, с которой я сталкиваюсь, заключается в том, что я могу ' t оба используют res.render () (для обслуживания страницы фронтальной загрузки) и res.redirect () (для перенаправления пользователя после выполнения всех вызовов POST). Как можно go реализовать эту концепцию в NodeJS?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...