3
respostas

Uncaught (in promise) Error: ENOENT: no such file or directory, open 'photoshop'

const jsonfile = require('jsonfile-promised');
const fs = require('fs');

module.exports = {
    salvaDados(curso, tempoEstudado) {
        let arquivoDoCurso = __dirname + '/data/'+ curso + '.json';
        if(fs.existsSync(arquivoDoCurso)) {
            this.adicionaTempoAoCurso(arquivoDoCurso, tempoEstudado);
        } else {
            this.criaArquivoDeCurso(arquivoDoCurso,{})
                .then(() => {
                    this.adicionaTempoAoCurso(arquivoDoCurso, tempoEstudado);
                });
        }
    },
    adicionaTempoAoCurso(arquivoDoCurso, tempoEstudado) {
        let dados = {
            ultimoEstudo: new Date().toString(),
            tempo: tempoEstudado
        }
        jsonfile.writeFile(arquivoDoCurso, dados,  {spaces: 2})
                .then(() => {
                    console.log('Tempo salvo com sucesso');
                }).catch((err) => {
                    console.log(err);
                })
    }, 
    criaArquivoDeCurso(nomeArquivo, conteudoArquivo){
        return jsonfile.writeFile(nomeArquivo,conteudoArquivo)
                .then(() => {
                    console.log('Arquivo Criado')
                }).catch((err) => {
                    console.log(err);
                });
    },
    pegaDados(curso){
        let arquivoDoCurso = __dirname + '/data/'+ curso + '.json';
        return jsonfile.readFile(curso);
    }
}
3 respostas

Oi André, tudo bem? Me explica melhor o que foi feito e como o erro aconteceu? Só olhando direto assim pro código fica um pouco difícil de procurar o problema. Cola também o erro completo? Geralmente ele diz a linha e o arquivo que o erro aconteceu.

Ele diz o erro está no código da página.

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <title>Alura Timer</title>
    <link rel="stylesheet" href="css/index.css">
</head>
<body>
    <section class="container">
        <div id="link-sobre">
            <img class="info-button" src="img/info-button.svg">
        </div>
        <h1 class="titulo">Alura Timer</h1>
        <div class="timer">
            <div class="relogio">
                <span class="tempo">00:10:23</span>
            </div><!--
            --><div class='controles'>
                <img class="botao-play" src="img/play-button.svg">
            </div>
            <div class="curso-container">
                <span class="curso">photoshop</span>
            </div>
        </div>

    </section>
    <script>require('./js/renderer')</script>
</body>
</html>

Olá André, eu não entendi muito bem o erro que você está recebendo. Chutando aqui você pode estar passando o caminho do arquivo errado, você criou a pasta data dentro de alura-timer? no mesmo nível da pasta app? Se você tiver criado essa pasta dentro de App você terá um erro.

let arquivoDoCurso = __dirname + '/data/'+ curso + '.json';

Outro ponto seria na criação do método criarArquivoDeCurso pois você está tratando o retorno da promise em dois pontos na criação:

criaArquivoDeCurso(nomeArquivo, conteudoArquivo){
        return jsonfile.writeFile(nomeArquivo,conteudoArquivo)
                .then(() => {
                    console.log('Arquivo Criado')
                }).catch((err) => {
                    console.log(err);
                });
    },

E na chamada do método

this.criaArquivoDeCurso(arquivoDoCurso,{})
                .then(() => {
                    this.adicionaTempoAoCurso(arquivoDoCurso, tempoEstudado);
                });

Experimente tratar a promise somente na chamada

Criação:

criaArquivoDeCurso(nomeArquivo, conteudoArquivo){
        return jsonfile.writeFile(nomeArquivo,conteudoArquivo);
    },

Chamada:

this.criaArquivoDeCurso(arquivoDoCurso,{})
                .then(() => {
                    this.adicionaTempoAoCurso(arquivoDoCurso, tempoEstudado);
                }).catch((err) => {
                    console.log(err);
                });

Espero ter ajudado, bons estudos.