Не удается опубликовать несколько и длинных запросов Axios

#node.js #axios #request #http-status-code-504

Вопрос:

Мне нужно отправить запрос post на другой API, который вернет результат примерно за 7 секунд.

Если я попытаюсь отправить сообщение по одному, это отлично сработает. Но как только я делаю цикл или отправляю несколько запросов, он возвращает ошибки.

Ошибки иногда Error: socket hang up или status code: 504

Я пытался

  • множественный then().then().th
  • async/await внутри для петли
  • aync/await строка за строкой, вот так
       const toonifyNewFileName = `./uploads/Toonified-toonify-${baseFileName}`
      const toonifyRes = await axios.post(toonifyUrl, formData, {headers: headers})
      var {data:{num_faces, b64_encoded_output}} = toonifyRes;
      var base64Buffer = Buffer.from(b64_encoded_output, "base64");
      writeFile(toonifyNewFileName, base64Buffer, err => console.log("DONE 1"));
    
      const comicNewFileName = `./uploads/Toonified-comic-${baseFileName}`
      const comicRes = await axios.post(comicUrl, formData, {headers: headers})
      var {data:{num_faces, b64_encoded_output: newB64}} = comicRes;
      var base64Buffer2 = Buffer.from(newB64, "base64");
      writeFile(comicNewFileName, base64Buffer2, err => console.log("DONE 2")); 
     

Это не имеет значения writeFile() , я удалил, это не сработало.

Я предполагаю, что, поскольку первый запрос занимает от 7 до 8 секунд, именно поэтому он вызывает ошибку при следующем запросе?


подводить итоги

Мне нужно отправить несколько запросов, каждый из которых занимает от 7 до 8 секунд. Но он возвращает socket hang up ошибку или status code: 504 GATEWAY TIME OUT

что мне следует делать?

Комментарии:

1. Вы пробовали использовать timeout параметр? github.com/axios/axios#axioscreateconfig

Ответ №1:

Оказывается, моя проблема была не в аксиосе, а в том form-data .

первый запрос прошел хорошо, но секунд, я не знаю почему , но я думаю, что есть проблемы form-data , возможно, данные формы что-то пустое

поэтому я решил инициализировать formdata каждый раз, когда отправляю axios.post()

вот код

 const arr = [some arrya i need, like 4 elements];

await Promise.all(arr.map(async(elem) => {
    const formData = new FormData();
    formData.append('image', createReadStream(pictureUri));
    const headers = { ... };
    ...
    const response = await axios.post(url, formData, {headers: headers});
    do some work...
}))
 

ключ в том, что я должен был генерировать form-data каждый раз, хотя это всегда будет одно и то же…