Estoy publicando una solicitud con NodeJs. Aquí está mi código:
var request = require('request'); var rp = require('request-promise'); async function sendRequest(obj){ try{ // TRY STARTS HERE var requestTarget = await rp({ method: 'POST', uri: obj.url, headers: { "accept": "*/*", "accept-language": "en-US,en;q=0.9,ar-AE;q=0.8,ar;q=0.7", "content-type": "application/x-www-form-urlencoded; charset=UTF-8", "sec-ch-ua": "\" Not A;Brand\";v=\"99\", \"Chromium\";v=\"99\", \"Google Chrome\";v=\"99\"", "sec-ch-ua-mobile": "?0", "sec-ch-ua-platform": "\"macOS\"", "sec-fetch-dest": "empty", "sec-fetch-mode": "cors", "sec-fetch-site": "same-origin", "x-requested-with": "XMLHttpRequest", "cookie":obj.cookie, "Referer":obj.referer , "Referrer-Policy": "strict-origin-when-cross-origin" }, timeout:16000, body : obj.body }).then( (response)=>{ return response }) // TRY ENDS HERE }catch(error){ // catch STARTS HERE console.error( " error is :" +error); }// catch ENDS HERE console.log(" response is : " +requestTarget); }De todos modos, tengo un problema con la solicitud: conecte ETIMEDOUT cuando ejecuto el código y no tengo idea de cómo solucionarlo.
¿Qué podría causar este error? y ¿cómo puedo manejar este servidor?
ETIMEDOUT significa que el servidor no respondió a su solicitud en el tiempo de espera dado (en su ejemplo, 16 segundos). Ese error se puede manejar en el bloque catch.
El título de su pregunta menciona que cree que su servidor de destino está sobrecargado. Los errores ETIMEDOUT pueden aparecer en esa situación. ¿Ataque de denegación de servicio?
No tiene mucho que pueda hacer en su código al intentar la conexión de salida, excepto detectar el error, esperar un período de tiempo e intentarlo nuevamente.
Idealmente, cada vez consecutiva que detecte el error, esperará el doble de tiempo antes de volver a intentarlo. Para la primera espera, use un segundo. Luego espera 2, 4, 8, 16 y así sucesivamente. Desea darle al servidor de destino la oportunidad de trabajar a través de su cola de conexión, y martillarlo ralentiza ese proceso.
Después de un minuto más o menos deberías rendirte. Envíe un error a su sistema de registro de errores si tiene uno. Si su servicio es un servicio web, envíe a SU cliente un 500 (error de servidor genérico), 502 (puerta de enlace incorrecta al servidor ascendente) o 504 (tiempo de espera agotado del servidor ascendente), según lo que tenga sentido para su aplicación.
Si también controla el servidor de destino, puede averiguar qué está sucediendo allí. Es posible que necesite más capacidad. O un cliente deshonesto puede estar dando en el blanco muy fuerte. Es posible que su objetivo esté experimentando un ataque de denegación de servicio.
Manejar los errores de ETIMEDOUT es un dolor en el xxx. Si su servicio no es de misión crítica y esto no sucede muy a menudo, simplemente puede emitir el error 500, 502 o 504 a su cliente. Sin embargo, no olvide registrar el error: arreglar la situación puede requerir intervención humana.