2
respostas

TypeError [ERR_INVALID_URL]: Invalid URL

Fiz a mesma lógica que a prof, porém, no meu index não lê apenas um arquivo e sim arquivos que tem dentro de um diretório. Não consegui encontrar uma solução para esse erro TypeError [ERR_INVALID_URL]: Invalid URL

meu index:

const fs = require('fs');
const path = require('path');

console.log('index teste')

function extractLinks(text){
    const regex = /\[([^\]]*)\]\((https?:\/\/[^$#\s].[^\s]*)\)/gm;

    const resultArray = [];
    let sequencePrint;

    while((sequencePrint = regex.exec(text)) !== null){
        resultArray.push({ [sequencePrint[1]]: sequencePrint[2] })
    }
    return resultArray.length === 0 ? 'não há links' : resultArray;
}

function showError(erro){
        throw Error (chalk.red(erro.code, 'o diretorio não possui arquivos'))
}

async function getFile(filePath){
    const absolutPath = path.join(__dirname, '/diretorio');
    // console.log(absolutPath)
    const enconding = 'utf-8';
    const files =  await fs.promises.readdir(absolutPath, { enconding });
    try {    
        const result = Promise.all(files.map(async (file) => {
        const localFile = `${absolutPath}/${file}`;
        // console.log(localFile)
        const text = await fs.promises.readFile(localFile, enconding);
        return extractLinks(text); 
    }))
    return result;
    } catch(erro){
        return showError(erro);
    }
}


module.exports = getFile;

Arquivo cli.js:

const chalk = require('chalk');
const getFile = require('./index');
const validateURLs = require('./http-validation')

const filePath = process.argv; 
console.log(filePath)

async function processText(relativePath){
    const ResultLinksArray = await getFile(relativePath[2]);

    if(filePath[3] === 'validar'){
        console.log(chalk.yellow('lista dos links validados'), await validateURLs(ResultLinksArray));
    } else{
        console.log(chalk.yellow('listas dos links'), ResultLinksArray);
    }
}

processText(filePath);

Arquivo http-validation:

const fetch = (...args) => import('node-fetch').then(({default: fetch}) => fetch(...args));


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

async function statusCheck(arrayURLs){
    try{
        const arrayStatusLinks = await Promise.all(arrayURLs.map(async url => {
            const res = await fetch(url);
            return `${res.status} - ${res.statusText}`;
        }))
        return arrayStatusLinks;
    }catch(erro){
        return handlingErrors(erro);
    }
}

function generateArrayURLs(arrayURLs){
    return arrayURLs.map(objectLink => Object.values(objectLink).join());
}

async function validateURLs(arrayURLs){
    const links = generateArrayURLs(arrayURLs);
    const statusLinks = await statusCheck(links);

    const resultValidateURLs = arrayURLs.map((object, indice) => ({
        ...object,
        status: statusLinks[indice],
    }))
    return resultValidateURLs;
}

module.exports = validateURLs;

Alguém sabe onde errei?

2 respostas

hoje faz 2 semanas que publiquei...até agora nao obtive nenhum retorno. Site esta abandonado?

Olá! Tudo bem? Espero que sim!

Peço desculpas pela demora no retorno a sua mensagem.

No seu código, você está utilizando expressões regulares para extrair os links de um texto. Verifique se as URLs que você está passando para a função getFile estão no formato correto. Certifique-se de que elas começam com "http://" ou "https://".

Além disso, verifique se você está passando corretamente o caminho do diretório para a função getFile. No arquivo cli.js, você está obtendo o caminho do diretório a partir do process.argv, mas certifique-se de que você está passando o caminho correto ao executar o arquivo.

Por exemplo, se você estiver executando o arquivo cli.js a partir do diretório raiz do seu projeto, o caminho do diretório pode ser algo como ./diretorio. Certifique-se de que esse caminho está correto.

Com isso, gostaria de lhe informar que este curso recebeu uma nova versão, mais atualizada e com alguns conteúdos mais atuais. E caso seja de seu interesse, estarei deixando o link logo abaixo:

Espero ter ajudado a identificar o possível erro. Se tiver mais alguma dúvida, estarei à disposição!

Grande abraço e bons estudos!