4
respostas

Não aparece erro no console e o arquivo não é gerado

Pessoal, o código não funcionou e não foi apresentado erro. Podem ajudar ?

Código da cli.js

const fs = require('fs');
const trataErros = require('./erros/funcoesErro');

const caminhoArquivo = process.argv;
const link = caminhoArquivo[2];
const endereco = caminhoArquivo[3];

fs.readFile(link, 'utf-8', (erro, texto) => {
try {
if (erro) throw erro
const resultado = contaPalavras(texto);
criaESalvaArquivo(resultado, endereco);
} catch(erro) {
trataErros(erro);
}
})

async function criaESalvaArquivo(listaPalavras, endereco){
const arquivoNovo = ${endereco}\\resultado.txt;
const textoPalavaras = JSON.stringify(listaPalavras);
try {
await fs.promises.writeFile(arquivoNovo, textoPalavaras);
console.log('Arquivo criado');
} catch (erro) {
throw erro;
}
}

4 respostas

Pelo trecho que você enviou, o principal problema parece estar nesta linha:

const arquivoNovo = ${endereco}\\resultado.txt;

Ela precisa usar crases para interpolar a variável, por exemplo:

const arquivoNovo = `${endereco}/resultado.txt`;

ou

const arquivoNovo = `${endereco}\\resultado.txt`;

Também vale conferir se a função contaPalavras() foi importada corretamente e se o endereco está sendo passado certo no terminal. Eu testaria com um console.log(link, endereco) para validar isso.

Leandro, obrigado pela disponibilidade em ajudar.
Fiz a alteração e ainda assim nada mudou.

const fs = require('fs');
const trataErros = require('./erros/funcoesErro');

const caminhoArquivo = process.argv;
const link = caminhoArquivo[2];
const endereco = caminhoArquivo[3];

fs.readFile(link, 'utf-8', (erro, texto) => {
try {
if (erro) throw erro
const resultado = contaPalavras(texto);
criaESalvaArquivo(resultado, endereco);
} catch(erro) {
trataErros(erro);
}
})

async function criaESalvaArquivo(listaPalavras, endereco){
const arquivoNovo = ${endereco}\\resultado.txt;
const textoPalavaras = JSON.stringify(listaPalavras);
console.log(link, endereco);
try {
await fs.promises.writeFile(arquivoNovo, textoPalavaras);
console.log('Arquivo criado');
} catch (erro) {
throw erro;
}
}


Comando executado no log: node src/cli.js arquivos/texto-web.txt ./resultados/
comando enviado no console

Celio, olhando o seu trecho, existem alguns pontos que podem estar impedindo o funcionamento:

A linha do caminho do arquivo está incorreta.
Você escreveu:

const arquivoNovo = ${endereco}\\resultado.txt;

O correto é usar crases:

const arquivoNovo = `${endereco}/resultado.txt`;

A função contaPalavras() não aparece importada no código enviado. Se ela estiver em outro arquivo, precisa fazer o require.
Como criaESalvaArquivo() é assíncrona, o ideal é chamar com await, senão um erro no writeFile pode não cair no try/catch como esperado.
A pasta ./resultados/ precisa existir. Se ela não existir, o arquivo não será criado.

Uma versão mais segura seria:

const fs = require('fs');
const path = require('path');
const trataErros = require('./erros/funcoesErro');
const contaPalavras = require('./contaPalavras'); // ajustar caminho

const caminhoArquivo = process.argv;
const link = caminhoArquivo[2];
const endereco = caminhoArquivo[3];

fs.readFile(link, 'utf-8', async (erro, texto) => {
  try {
    if (erro) throw erro;
    const resultado = contaPalavras(texto);
    await criaESalvaArquivo(resultado, endereco);
  } catch (erro) {
    trataErros(erro);
  }
});

async function criaESalvaArquivo(listaPalavras, endereco) {
  await fs.promises.mkdir(endereco, { recursive: true });
  const arquivoNovo = path.join(endereco, 'resultado.txt');
  const textoPalavras = JSON.stringify(listaPalavras, null, 2);
  await fs.promises.writeFile(arquivoNovo, textoPalavras, 'utf-8');
  console.log('Arquivo criado');
}

Se quiser validar passo a passo, teste também:

console.log('link:', link);
console.log('endereco:', endereco);

e confirme se a pasta resultados está sendo criada corretamente.

Boa tarde, Celio.
Você já conseguiu resolver?
Posta aqui por gentileza o código do arquivo onde está a sua função contaPalavras().

Eu estava com o mesmo problema, e encontrei o erro no código em que se encontrava a função.
A professora refatorou o código. Talvez alguma alteração tenha passado despercebida aí no seu código.