1
resposta

Erro em throw new Error(erro.message);

Pessoal estou com erro na Aula 5.5 após executar o comando no terminal, esse erro aparece, alguém pode me ajudar?

xercicios\nodejs-CriandoBiblioteca> npm run cli validar

> nodejs-criandobiblioteca@1.0.0 cli
> node cli.js ./arquivos/texto1.md "validar"

operação concluída
C:\Users\antonio.leoncio\Documents\Dev\praticaJS_Exercicios\nodejs-CriandoBiblioteca\http-validacao.js:4
  throw new Error(erro.message);
        ^

Error: request to https://developer.mozilla.org/pt-BR/docs/Web/API/HTMLCanvasElement failed, reason: self signed certificate in 
certificate chain
    at manejaErros (C:\Users\antonio.leoncio\Documents\Dev\praticaJS_Exercicios\nodejs-CriandoBiblioteca\http-validacao.js:4:9) 
    at checaStatus (C:\Users\antonio.leoncio\Documents\Dev\praticaJS_Exercicios\nodejs-CriandoBiblioteca\http-validacao.js:18:5)

    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async validaURLs (C:\Users\antonio.leoncio\Documents\Dev\praticaJS_Exercicios\nodejs-CriandoBiblioteca\http-validacao.js:42:23)
    at async processaTexto (C:\Users\antonio.leoncio\Documents\Dev\praticaJS_Exercicios\nodejs-CriandoBiblioteca\cli.js:20:50)  
PS C:\Users\antonio.leoncio\Documents\Dev\praticaJS_Exercicios\nodejs-CriandoBiblioteca>
const fetch = (...args) => import('node-fetch').then(({default: fetch}) => fetch(...args));

function manejaErros(erro) {
  throw new Error(erro.message);
}

async function checaStatus(arrayURLs) {
  try {
    const arrayStatus = await Promise
      .all(arrayURLs
        .map(async url => {
          const res = await fetch(url)
          return res.status;
    }))
    return arrayStatus;
  } catch(erro) {
    manejaErros(erro);
  }
}

function geraArrayDeURLs(arrayLinks) {
  return arrayLinks
    .map(objetoLink => Object
      .values(objetoLink).join());
}

async function validaURLs(arrayLinks) {
  const links = geraArrayDeURLs(arrayLinks);
  const statusLinks = await checaStatus(links);

  const resultados = arrayLinks.map((objeto, indice) => ({
    ...objeto,
    status: statusLinks[indice]
  }))
  return resultados;
}

module.exports = validaURLs;
1 resposta

Olá, Antonio! Tudo bem?

Desculpa a demora por um retorno.

De acordo com as informações compartilhadas, aparentemente há um problema de certificado autoassinado ao fazer uma requisição para o URL "https://developer.mozilla.org/pt-BR/docs/Web/API/HTMLCanvasElement". Esse erro ocorre porque o certificado do servidor não é reconhecido como confiável pelo seu ambiente de desenvolvimento.

Uma possível solução para esse problema é desabilitar a verificação do certificado SSL durante as requisições. No entanto, é importante ressaltar que essa solução não é recomendada em ambientes de produção, pois a verificação do certificado é uma medida importante de segurança.

Para desabilitar a verificação do certificado no Node.js, podemos utilizar a biblioteca node-fetch com a opção rejectUnauthorized definida como false. Assim, a verificação do certificado será ignorada. Segue abaixo um exemplo de como fazer isso:

const fetch = require('node-fetch');

async function checaStatus(arrayURLs) {
  try {
    const arrayStatus = await Promise.all(
      arrayURLs.map(async (url) => {
        const res = await fetch(url, { rejectUnauthorized: false });
        return res.status;
      })
    );
    return arrayStatus;
  } catch (erro) {
    manejaErros(erro);
  }
}

No código acima, adicionamos a opção rejectUnauthorized: false ao fazer a requisição com o fetch. Dessa forma, o Node.js não irá verificar o certificado durante a requisição.

Entretanto, devemos nos lembrar de que essa solução é apenas para ambientes de desenvolvimento e testes. Em produção, é importante utilizar certificados confiáveis para garantir a segurança das nossas requisições.

Espero ter ajudado. Caso tenha ficado alguma dúvida, sinta-se à vontade em comunicar, estou à disposição!

Um forte abraço e bons estudos!

Caso este post tenha te ajudado, por favor, marcar como solucionado ✓