diff --git a/app.js b/app.js index 4b6cce1..efbd135 100644 --- a/app.js +++ b/app.js @@ -26,26 +26,34 @@ function createApp() { const numero = rawNumero ? String(rawNumero).trim() : ""; try { - const viaCepData = await fetchJson( - `https://viacep.com.br/ws/${cep}/json/` - ); - // adicionar retry na consulta api ViaCEP + const viaCepUrl = `https://viacep.com.br/ws/${cep}/json/`; + let viaCepData = await fetchJson(viaCepUrl); + // ViaCEP com retry e backoff (corrige shadowing e trata exceções) + + const maxAttempts = 5; + let attempt = 0; + let retryDelayMs = 1000; // delay inicial + if (!viaCepData || viaCepData.erro) { - console.info(`[INFO] Primeira tentativa da API ViaCEP falhou para o CEP ${cep}, tentando novamente...`); - let attempt = 0; - const maxAttempts = 5; - let viaCepData = null; while (attempt < maxAttempts) { - viaCepData = await fetchJson( - `https://viacep.com.br/ws/${cep}/json/` - ); - if (viaCepData && !viaCepData.erro) break; - console.info(`[INFO] Tentativa ${attempt + 1} da API ViaCEP`); + try { + viaCepData = await fetchJson(viaCepUrl); + if (viaCepData && !viaCepData.erro) break; + console.info(`[INFO] ViaCEP retornou erro ou vazio na tentativa ${attempt + 1} para CEP ${cep}`); + } catch (e) { + console.warn(`[WARN] Erro na chamada ViaCEP (tentativa ${attempt + 1}) para ${cep}: ${e && e.message ? e.message : e}`); + } attempt++; + console.info(`[INFO] Aguardando ${retryDelayMs}ms antes da próxima tentativa ViaCEP (${attempt}/${maxAttempts})`); + await new Promise((resolve) => setTimeout(resolve, retryDelayMs)); + retryDelayMs *= 2; } - if (!viaCepData || viaCepData.erro) { - return res.status(404).json({ error: "CEP não encontrado" }); - } + } + + if (!viaCepData || viaCepData.erro) { + + console.error(`[ERROR] ViaCEP falhou após ${maxAttempts} tentativas para CEP ${cep}`); + return res.status(404).json({ error: "CEP não encontrado" }); } const logradouro = viaCepData.logradouro || ""; const bairro = viaCepData.bairro || "";