#node.js #reactjs #express #http
#node.js #reactjs #экспресс #http
Вопрос:
я использую react и express в своем проекте, и я отправляю запросы от моего клиента react на мой сервер express, но когда я пытаюсь выполнить запрос к моему expressjs API, я могу выполнить только 5 запросов, а 6-й и что после него отклоняется
мой код реакции:
fetch('http://localhost:9000/searchprocessor', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
product: {
Searchinput: e.target.value
}
})
});
(выборка запроса каждый раз, когда изменяется «e.target.value»)
теперь обработка запроса в express:
router.post('/', function(request, response){
fs.readFile('./processes/itemrequested.json', function readFileCallback(err, data, next) {
if (err){
console.log(err);
} else {
var content = JSON.parse(data); //covert it to an object
var reqproduct = request.body.product.Searchinput;
console.log("in searchprocessor requested product is: " reqproduct);
content.item = reqproduct;
console.log("in searchprocessor content.item is: " content.item);
json = JSON.stringify(content, null, 4); //convert it back to json
console.log(json)
fs.writeFile('./processes/itemrequested.json', json, 'utf8', (callback) => {
console.log("searchprocessor callback: " callback);
}); // write it back
}});
});
простой код, редактирующий содержимое itemrequested.json, который содержит:
{"item": "" }
при регистрации переменной (reqproduct) она регистрируется и работает отлично, пока я не отправлю 6-й запрос, например:
отправка 5 запросов, первый из которых содержит число 1, вплоть до пятого запроса, который содержит число 5, а затем при отправке 6-го запроса (который, например, содержит число 6) ничего не происходит, сервер перестает работать.
это моя проблема, я надеюсь, что что-то может мне помочь, я застрял с этим на 3 дня, и я не могу найти решение
Комментарии:
1. нет
response.send()
. Как вы получаете ответ даже в 1-й раз2. @aRvi я не отправляю ответ, я просто регистрирую запрос
3. попробуйте отправить ответ и проверьте, работает ли 6-й запрос
4. @aRvi я понимаю вашу точку зрения, но мне это не нужно, потому что даже если ведение журнала прекращается при пятом запросе, также «item» (itemrequested.json) может быть изменен только 5 раз после каждого запроса
5. Вам нужно фактически завершить запросы, это потому, что вы достигаете предела для количества ожидающих запросов, которые вы можете иметь.
Ответ №1:
Это вызвано браузером. Браузер имеет ограничение на количество запросов, которые он будет отправлять на один и тот же хост одновременно, и сверх этого запросы помещаются в очередь в браузере до завершения одного из предыдущих запросов.
Каждый браузер реализует это немного по-разному, но обычно ограничение составляет около 5 запросов к одному и тому же хосту.
Некоторые сайты обходят это, фактически имея несколько имен хостов, которые сопоставляются с одним и тем же сервером, и используя разные запросы к разным именам хостов, чтобы обойти ограничение.
Во всех случаях лучше переосмыслить дизайн вашего API, чтобы вам не требовалось столько запросов (например, попробуйте объединить несколько запросов в один больший запрос).
Кроме того, убедитесь, что вы отправляете правильный ответ на каждый отдельный запрос на вашем сервере. Если вы не отправите ответ, то эти запросы будут зависать некоторое время, пока в конечном итоге не истечет время ожидания. router.post()
Код, который вы показываете, не отправляет никакого ответа. Для этого, по крайней мере, требуется res.send("")
или res.end()
, если вам не нужны какие-либо фактические данные ответа.
Комментарии:
1. вы абсолютно правы, потому что, когда я обновляю свой браузер, я могу снова выполнить 5 запросов. большое вам спасибо!
2. @MiladDeraawi — Посмотрите, что я добавил к своему ответу.
3. @MiladDeraawi — Также смотрите Мое последнее дополнение к ответу, которое может быть частично причиной вашей проблемы. Вы должны отправить ответ на любой запрос, иначе они не завершаются в течение длительного времени (пока они в конечном итоге не истекут), что делает вашу проблему намного хуже.