Сейчас я разрабатываю простое приложение 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?