Intenté enviar un montón de solicitudes de publicación con carga de archivos en nodejs. usando axios.post, podría hacer una sola solicitud fácilmente. Pero recibí un error al intentar enviar varias solicitudes asincrónicas.
Basado en el documento axios, utiliza axios.all([ axios.get(), axios.get(), ...]) para realizar solicitudes asíncronas en el momento.
Si envié mi código, el error dice:
"Error: la solicitud falló con el código de estado 500 ~"
. Este error es el mismo cuando envío una solicitud sin cargar un archivo. Así que supongo que mi código no adjunta un archivo cuando envío una solicitud asíncrona.
Por favor, avíseme lo que me estoy perdiendo.
Mi código está a continuación:
var axios = require('axios'); var FormData = require('form-data'); var fs = require('fs'); var data = new FormData(); data.append('files', fs.createReadStream('./liscense.jpg')); var config = { method: 'post', url: 'https://domainname/scan/id', headers: { ...data.getHeaders() }, data : data }; axios .all([axios(config), axios(config)]) .then( axios.spread((res1, res2) => { console.log(res1.data, res2.data); }) ) .catch((error) => { console.log(error); });
Tu problema es que estás enviando un flujo vacío,
Hay una matriz "_streams" en los datos de su formulario que contiene la secuencia de su archivo "liscense.jpg", y cuando PUBLIQUE la primera solicitud a su host de destino, esta secuencia estará vacía y la secuencia de sus otras solicitudes estará vacía , por lo que el archivo no llega a su destino.
En resumen, este código solo envía su archivo una vez en la primera solicitud, y otras solicitudes no incluyen su archivo/archivos.
puedes probar esto:
const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); function postRequest() { const data = new FormData(); data.append('files', fs.createReadStream('./liscense.jpg')); const config = { method: 'post', url: 'https://domainname/scan/id', headers: { ...data.getHeaders() }, data: data }; return config; } axios .all([axios(postRequest()), axios(postRequest())]) .then( axios.spread((res1, res2) => { console.log(res1.data, res2.data); }) ) .catch((error) => { console.log(error); });