2
respostas

Refatoração incorreta

Achei válido informar:

  • Refatorar exatamente do jeito que está para usar a função '.readdir' não irá funcionar por 2 motivos:
  • Em package.json, fizemos um script onde o parâmetro passado na chave cli sempre vai ser interpretado como 'texto.md' e não como um caminho relativo, o que retornará um erro.
  • A código pressupõe que tanto cli.js como index.js estão dentro do diretório src, porém no exemplo em vídeo essa pasta não foi criada, portanto ao usar path.join() não se deve usar o '..', apenas __dirname e caminhoArquivo.
2 respostas

Renato,

Eu não tenho a pasta src, mas fiz as seguintes alterações e funcionou da mesma forma.

Na função, coloquei aspas duplas no __dirname

async function pegaArquivo(caminho) {
    const caminhoAbsoluto = path.join("__dirname", '..', caminho);
    const encoding = 'utf-8';
    try {
      const arquivos = await fs.promises.readdir(caminhoAbsoluto, { encoding });
      const result = await Promise.all(arquivos.map(async (arquivo) => {
        const localArquivo = `${caminhoAbsoluto}/${arquivo}`;
        const texto = await fs.promises.readFile(localArquivo, encoding);
        return extraiLinks(texto);
      }));
      return result;
    } catch (erro) {
      return trataErro(erro);
    }
   }

E no script do package.json alterei o cli:

{
  "name": "lib-markdown",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "cli": "node cli.js ./arquivos"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "type": "module",
  "dependencies": {
    "chalk": "^5.0.1"
  }
}

Dessa forma funcionou normalmente, com o adicional de que agora, se na pasta arquivos, você criar um outro arquivo.md, a função processaTexto() irá funcionar tanto para texto1.md quanto para arquivo.md . Espero que ajude.

Eu consegui resolver, na verdade informei o que fiz pra poder funcionar, do jeito que coloquei aí em cima, o que na prática não importa porque depois tu nem usa mais readdir.