У меня есть установка node.js / express с кодом ниже. Код на стороне клиента построен с помощью React. Они могут запросить X количество игроков, используя выборку от 1 до того, что они хотят. Запрос отправляется на мой экспресс-сервер, который отправляет запросы в общедоступные API Riot Games. У меня проблема в том, что если запрос слишком велик, время выборки истекло.
Кто-то дал мне идею, чтобы первоначальный запрос POST возвратил «id», а затем выполнил фактический запрос в фоновом режиме. Затем пусть клиентский браузер периодически проверяет, завершен ли запрос GET-запросом.
Я вызываю исходный POST внутри React componentDidMount () , а затем отправляю запрос GET внутри componentDidUpdate () . Я думаю, с чем я сталкиваюсь, когда отправляю запрос get, а также с тем, как я запускаю фоновый процесс. Я помещаю результат запроса в массив allResults [0]. playerRequest является асинхронной функцией.
Надеюсь, я объяснил это достаточно хорошо ... не совсем уверен, что делать.
ЦСИ / сервер / index.js
var playerSearch = require('./playerSearch.js');
const express = require('express');
const bodyParser = require('body-parser');
const uuidv1 = require('uuid/v1');
const app = express();
app.use(express.static('dist'));
app.use(bodyParser.json());
app.use(express.json());
const port = process.env.PORT || 8080;
app.listen(port, () => console.log('Listening on port ' + port + '!'));
var allResults = [];
//Beginning of all methods
app.get('/api/getUsername', (req, res) => res.send({ username: 'Summoner' }));
app.post('/api/champstats/initiatePlayerSearch', async function(req, res){
var searchID = uuidv1();
allResults.push(await playerSearch(req, searchID));
console.log('Search ID: ' + searchID);
return res.send({searchID: searchID});
});
app.get('/api/champstats/playerSearch/:searchId', async function(req, res){
const result = await allResults.filter(x => x.requestID === req.params.searchID);
return res.send({stats: result[0].stats});
});