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

TypeError: Cannot read property 'persistencia' of undefined

Olá!

Ao entrar em uma rota, o seguinte erro é apresentado:

"TypeError: Cannot read property 'persistencia' of undefined"

O erro completo:

TypeError: Cannot read property 'persistencia' of undefined
    at app.get (E:\Documentos\GitHub\statusServer\servidor\src\rotas\rotas.js:12:36)
    at Layer.handle [as handle_request] (E:\Documentos\GitHub\statusServer\servidor\node_modules\express\lib\router\layer.js:95:5)
    at next (E:\Documentos\GitHub\statusServer\servidor\node_modules\express\lib\router\route.js:137:13)
    at Route.dispatch (E:\Documentos\GitHub\statusServer\servidor\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (E:\Documentos\GitHub\statusServer\servidor\node_modules\express\lib\router\layer.js:95:5)
    at E:\Documentos\GitHub\statusServer\servidor\node_modules\express\lib\router\index.js:281:22
    at Function.process_params (E:\Documentos\GitHub\statusServer\servidor\node_modules\express\lib\router\index.js:335:12)
    at next (E:\Documentos\GitHub\statusServer\servidor\node_modules\express\lib\router\index.js:275:10)
    at expressInit (E:\Documentos\GitHub\statusServer\servidor\node_modules\express\lib\middleware\init.js:40:5)
    at Layer.handle [as handle_request] (E:\Documentos\GitHub\statusServer\servidor\node_modules\express\lib\router\layer.js:95:5)

Segue abaixo a relação dos arquivos:

================================

src\config\customExpress.js:

const express = require('express');
const consign = require('consign');

module.exports = () => {

    var app = express();

    consign({cwd: './src'})
    .include('rotas')
    .then('persistencia')
    .into(app);

    return app; 
};

==========================

index.js

const app = require('./src/config/customExpress')();
const porta = 3433;

app.listen(porta, () => console.log("Servidor rodando na porta " + porta));

==================================================

src\persistencia\mysqlConnectionFactory.js:


const mysql = require('mysql');

module.exports = () => {
    return mysql.createConnection({
        host: 'localhost',
        user: 'root',
        password: 'matheus',
        database: 'teste'
    });
};

=============================================================

src\persistencia\gcDao.js:

function GCDao(connection){
    this._connection = connection;
}

GCDao.prototype.lista = callback => this._connection.query('SELECT * FROM pessoa', callback);

module.exports = () => GCDao;

=============================================================

src\rotas\rotas.js:


module.exports = app => {

    app.get("/", (req, res) => res.status(404).send("Não foi possível encontrar o recurso solicitado"));


    app.get("/gc", (req, res) => {
        console.log();
        console.log('Requisitando status do GC');
        console.log();

        const connection = app.src.persistencia.mysqlConnectionFactory();
        const pagamentoDao = new app.src.persistencia.pagamentoDao(connection);

        pagamentoDao.lista((exception, result)  => {
            if(!exception){
                console.log('Pessoas:\n' + JSON.stringify(result));
                res.json(result);
            }else{
                console.log('Não foi possível obter os resultados.\n' + exception);
                res.status(500).send('Não foi possível obter os resultados.\n' + exception);
            }
        });

    });
}
3 respostas

Boa noite, Matheus! Como vai?

Como visto nessa aula a partir de 4:50 o correto seria fazer:

const connection = app.persistencia.connectionFactory();
const pagamentoDao = new app.persistencia.pagamentoDao(connection);

Faça essa correção e veja se as coisas funcionam como vc esperava!

Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!

Mesmo assim, o problema ainda persiste...

Está acontecendo o seguinte erro:

TypeError: Cannot read property 'mysqlConnectionFactory' of undefined
    at app.get (E:\Documentos\Node\servidor\src\rotas\rotas.js:20:45)
    at Layer.handle [as handle_request] (E:\Documentos\Node\servidor\node_modules\express\lib\router\layer.js:95:5)
    at next (E:\Documentos\Node\servidor\node_modules\express\lib\router\route.js:137:13)
    at Route.dispatch (E:\Documentos\Node\servidor\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (E:\Documentos\Node\servidor\node_modules\express\lib\router\layer.js:95:5)
    at E:\Documentos\Node\servidor\node_modules\express\lib\router\index.js:281:22
    at Function.process_params (E:\Documentos\Node\servidor\node_modules\express\lib\router\index.js:335:12)
    at next (E:\Documentos\Node\servidor\node_modules\express\lib\router\index.js:275:10)
    at expressInit (E:\Documentos\Node\servidor\node_modules\express\lib\middleware\init.js:40:5)
    at Layer.handle [as handle_request] (E:\Documentos\Node\servidor\node_modules\express\lib\router\layer.js:95:5)

Conteúdo do rotas.js (contém as informações das rotas):


module.exports = app => {


    app.get("/", (req, res) => {
        let resultado = {
            'status': '404',
            'data': new Date,
            'resultado': []
        };
        res.status(404).json(resultado);
    });


    app.get("/gc", (req, res) => {
        console.log();
        console.log('Requisitando status do GC');
        console.log();

        const connection = app.persistencia.mysqlConnectionFactory();
        const gcDao = new app.persistencia.gcDao(connection);


        gcDao.lista((exception, result)  => {
            if(!exception){
                console.log('Pessoas:\n' + JSON.stringify(result));
                result.status = '200';
                result.data = new Date;
                res.json(result);
            }else{
                console.log('Não foi possí­vel obter os resultados.\n' + exception);
                let resultado = {
                    'status': '500',
                    'data': new Date,
                    'resultado': []
                };
                res.status(500).json(resultado);
            }
        });

    });
}

====================================================

EDIT:

Tirando todos os arquivos de dentro da pasta "src", ou seja, todos os arquivos estão dentro da mesma pasta raiz, ocorreu o erro abaixo:

TypeError: app.persistencia.mysqlConnectionFactory is not a function
    at app.get (E:\Documentos\Node\servidor\rotas\rotas.js:20:45)
    at Layer.handle [as handle_request] (E:\Documentos\Node\servidor\node_modules\express\lib\router\layer.js:95:5)
    at next (E:\Documentos\Node\servidor\node_modules\express\lib\router\route.js:137:13)
    at Route.dispatch (E:\Documentos\Node\servidor\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (E:\Documentos\Node\servidor\node_modules\express\lib\router\layer.js:95:5)
    at E:\Documentos\Node\servidor\node_modules\express\lib\router\index.js:281:22
    at Function.process_params (E:\Documentos\Node\servidor\node_modules\express\lib\router\index.js:335:12)
    at next (E:\Documentos\Node\servidor\node_modules\express\lib\router\index.js:275:10)
    at expressInit (E:\Documentos\Node\servidor\node_modules\express\lib\middleware\init.js:40:5)
    at Layer.handle [as handle_request] (E:\Documentos\Node\servidor\node_modules\express\lib\router\layer.js:95:5)
solução!

Eu algumas funções por arrow functions e devido ao escopo léxico, isso deve ter afetado algumas funções.

Após utilizar funções mesmo com a sintaxe de "function()", o problema foi resolvido.

Muito obrigado!

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