Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

navegador: TypeError: livroDao.lista is not a function

Pessoal, nao consigo encontrar o problema, ao executar o servidor Ele me retorna este erro> https://imgur.com/a/q9xAD0d

rotas.js
const LivroDao = require('../infra/livro-dao');

const db = require('../../config/database'); 
module.exports = (app) => { // () => { } arrow functions

    app.get('/', function(req, resp){
        resp.send(
            `
            <html>
                <head>
                    <title></title>
                    <meta charset="utf-8">
                </head>
                <body>
                    <h1>Casa do Codigo</h1>
                </body>
            <html>
            `

        );
    });

    app.get('/livros', function(req,resp){

        const livroDao = new LivroDao(db);
        livroDao.lista()
                      .then(livros => resp.marko(   
                        require('../views/livros/lista/lista.marko'),
                            {
                                livros: livros
                            }
                    ))
                    .catch(erro => console.log(erro))
            });   
};
livro-dao.js
class LivroDao {    
    constructor(db) {  
        this._db = db;  
    }

    listaLivros(callback) {
        this._db.all(
            'SELECT * FROM livros',
            (erro, resultados) =>   
                callback(erro, resultados)
        )
    }
}
module.exports = LivroDao;
5 respostas
solução!

No seu arquivo "livro-dao" você não tem uma funcão chamada "lista", lá existe uma função chamada "listaLivros". Você precisa alterar o nome da função.

@Gabriel Leite , dá uma olhad neste erro ! imagem do erro: https://imgur.com/a/Xvn5IB1

'livroDao.js'

class LivroDao {    
    constructor(db) { 
        this._db = db;    
    }

    lista() { 
        return new Promisse((resolve, reject) => {
            this._db.all(
            'SELECT * FROM livros', 
            (erro, resultados) =>    
                (erro, resultados) => {
                    if (erro) return reject('Não foi possivel listar os livros');

                    return resolve(resultados);   
                    }
                )
            });
       }         
   }
}
module.exports = LivroDao;  // exportando a classe

'rotas.js'

const LivroDao = require('../infra/livro-dao').default;

const db = require('../../config/database'); 
module.exports = (app) => { // () => { } arrow functions

    app.get('/', function(req, resp){
        resp.send(
            `
            <html>
                <head>
                    <title></title>
                    <meta charset="utf-8">
                </head>
                <body>
                    <h1>Casa do Codigo</h1>
                </body>
            <html>
            `

        );
    });

    app.get('/livros', function(req,resp){

        const livroDao = new LivroDao(db);
        livroDao.lista()
                      .then(livros => resp.marko(   
                        require('../views/livros/lista/lista.marko'),
                        {
                            livros: livros
                        }
                    ))
                .catch(erro => console.log(erro));
            });   
};

Boa tarde, Fabiano! Como vai?

Dei uma olhada no seu código do livro-dao.js e o que vi de errado foi que vc escreveu Promisse quando o correto é Promise. Veja se fazendo a alteração o problema é resolvido. Qualquer coisa é só falar que eu continuo a te ajudar!

Espero que esteja curtindo e aproveitando ao máximo todo o conteúdo do curso!

Grande abraço e bons estudos, meu aluno!

Olá @Gabriel Leite como vai ? Olha eu não tinha me atentado para este erro, porém ao executar o comando npm start ele me dá este seguinte erro, veja só:

> casadocodigo@1.0.0 start /home/home/Documents/casadocodigo
> nodemon server.js --ignore *.marko.js

[nodemon] 1.18.4
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node server.js`
/home/home/Documents/casadocodigo/src/app/infra/livro-dao.js:44
module.exports = LivroDao;  // exportando a classe
^^^^^^

SyntaxError: Unexpected identifier
    at new Script (vm.js:79:7)
    at createScript (vm.js:251:10)
    at Object.runInThisContext (vm.js:303:10)
    at Module._compile (internal/modules/cjs/loader.js:657:28)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
    at Module.load (internal/modules/cjs/loader.js:599:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
    at Function.Module._load (internal/modules/cjs/loader.js:530:3)
    at Module.require (internal/modules/cjs/loader.js:637:17)
    at require (internal/modules/cjs/helpers.js:22:18)
[nodemon] app crashed - waiting for file changes before starting...

Ele aponta para o module.exports, tentei encontrar o que pode ter ocorrido, mas não consegui enxergar este erro, ou onde ele está, segui a escrita do seu código lá também, e mesmo assim não encontrei, vocêconsegue identificar este erro ? o que pode ter ocasionado ? Obrigado pela ajuda Gabriel, aprendendo muito aqui com o seu conteúdo.

Olá Fabiano, tudo bom? Nesse trecho do código, os parâmetros (erro, resultados) estão duplicados. Consegui replicar a falha da aplicação dessa forma.

    lista() { 
        return new Promisse((resolve, reject) => {
            this._db.all(
            'SELECT * FROM livros', 
            (erro, resultados) =>    
                (erro, resultados) => {
                    if (erro) return reject('Não foi possivel listar os livros');

Nessa altura do projeto, o código correto de livro-dao.js seria:

class LivroDao {

    constructor(db) {
        this._db = db;
    }

    lista() {
        return new Promise((resolve, reject) => {
            this._db.all(
                'SELECT * FROM livros',
                (erro, resultados) => {
                    (erro, resultados) => {
                    if (erro) return reject('Não foi possível listar os livros!');

                    return resolve(resultados);
                }
            )

        });
    }
}

module.exports = LivroDao;

Isso resolve o seu problema?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software