4
respostas

Tentando fazer com a refatoração do capítulo passado

Continuando minha saga de tentar fazer os exercícios utilizando a a refatoração para a função pegar as URL's de todos os arquivos, eu fiz as seguintes alterações no código:

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

    let atual = 0;
    let arrayResultado = [];

    while (atual < arrayLinks.length) {
        let arrayAtual = arrayLinks[atual]
        arrayResultado.push(arrayAtual.map((objeto, indice) => ({
            ...objeto, status: statusLinks[indice]
        })));
        atual++
    }

    let arrayFinal = [].concat(...arrayResultado)
    return arrayFinal;
}

Espero que possa ajudar alguém.

4 respostas

Muito bom cara!!! No meu caso, eu tinha dois array de arrays para links e outro para statuscode (usando a mesma lógica para diretórios). No meu caso ficou assim

function combineStatusLink(links, status) {
    const l = links;
    const s = status;
    const linksperfile = [];
    for (let i = 0; i < links.length; i++) {
        for (let j = 0; j < links[i].length; j++) {
            linksperfile.push({ link: l[i][j], status: s[i][j] });
        }
    }
    return linksperfile;
}

maneira mais simples pra concatenar as informações

Vocês tiveram que alterar o checa status? Meu código da o seguinte erro

        handleError(erro);
                    ^

ReferenceError: erro is not defined
    at statusCheck (/home/walter/Node-projects/2299-lib-nodejs-markdown-aula-1/http-valid.js:23:21)
    at async validUrls (/home/walter/Node-projects/2299-lib-nodejs-markdown-aula-1/http-valid.js:42:25)
    at async textProcess (/home/walter/Node-projects/2299-lib-nodejs-markdown-aula-1/cli.js:10:56)
walter@walter-black-book:~/Node-projects/2299-lib-nodejs-markdown-aula-1$ npm run cli validar

Meu código ficou assim

//função que ira manejar os erros
function handleError(erro) {
    throw new Error(erro.message);
}

//função que cria um array que ira receber os status do links usando a lib fetch
async function statusCheck(arrayUrl) {
    try {
        const arrayStatus = await Promise.all(
            arrayUrl.map(async (url) => {
                const res = await fetch(url);

                return `${res.status}-${res.statusText}`; //as respostas da requisição são objetos que possuem um status
            })
        );
        return arrayStatus;
    } catch {
        handleError(erro);
    }
}

function makeUrlArray(arrayLinks) {
    //função que extrai apenas as urls
    const uniqueArray = [].concat(...arrayLinks);

    const links = uniqueArray.map((link) => {
        return Object.values(link).join();
        //usamos o .join() para fazer apenas 1 array com os resultados e não um array de arrays
    });
    return links;
}

//Aqui serão executadas as funções que pegam os links e verificam seu status
async function validUrls(arrayLinks) {
    const links = makeUrlArray(arrayLinks);
    const statusLinks = await statusCheck(links);
    const results = arrayLinks.map((object, i) => ({
        ...object,
        status: statusLinks[i],
    }));
    return results;
}

module.exports = validUrls;

Consegui. Coloquei na pasta um arquivo sem nenhum link, isso trazia para o array um "não há links" e quebrava na hora do fech. Tirei a mensagem e deixei o campo vazio, ai salvei o array removendo espaços vazios fazendo o fech apenas nos links. Achei que ficou muito gambiarra, o que vocês acham?

    const result = await Promise.all(
    ...
    ...
    ...
        return getLInks(text) === "Não há links" ? "" : getLInks(text);
            })
        );
        return result.filter((e) => String(e).trim()); //remove espaços vazios da string