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

Retorna JSON vazio

Amigos, preciso de uma força. Fiz um exemplo seguindo os mesmos modelos do curso, porém ao acessar a rota localhost:3000/cartoes, ele sempre retorna um array vazio. Não estou conseguindo enxergar nenhum problema no código. Servidor rodando sem problemas. Segue os códigos abaixo:

arquivo de rotas cartaoRoutes.js

module.exports = function(app){
    var controller = app.controllers.cartaoController;
    app.route('/cartoes')
        .get(controller.listarTodos);
};

arquivo de controle cartaoController.js

var mongoose = require('mongoose');

module.exports = function(app){
    var controller = {};
    var model = mongoose.model('Cartao');

    controller.listarTodos = function(req, res){
        model
        .find()
        .then(function(cartoes){
            res.json(cartoes);
        }, function(error){
            console.log(error);
            res.status(500).json(error);
        });
    };

    return controller;
};

arquivo de modelo cartaoModel.js

var mongoose = require('mongoose');

var schema = mongoose.Schema({
    tipoCartao: {
        type: String,
        required: true
    },
    status: {
        type: Boolean,
        required: true
    },
    qtdCreditos: {
        type: Number,
        required: true
    },
    usuario: {
        codigo: {
            type: String,
            required: true
        },
        nome: {
            type: String,
            required: true
        },
        curso_setor: {
            type: String,
            required: true
        },
        turno: {
            type: String,
            required: true
        },
        tipoUsuario: {
            type: String,
            required: true
        }
    }
});

mongoose.model('Cartao', schema);

Estou inserindo direto pelo terminal do mongodb os documentos na coleção da seguinte maneira:

var cartao = {tipoCartao: 'NORMAL', status: true, qtdCreditos: 10, usuario:{ codigo: '123', nome: 'JOÃO', curso_setor: 'CHEFIA', turno: 'MANHÃ', tipoUsuario: 'ADMIN'}};

db.cartoes.insert(cartao);

3 respostas
solução!

Oi Anderson! Chuto que o Mongoose na hora de criar sua collection esta usando como nome de banco cartaos e não cartoes. Isso porque ele não sabe colocar no plural palavras em português. Com foto funcionava, porque virava fotos.

Mas você pode resolver isso dessa forma:

var schema = mongoose.Schema({
    tipoCartao: {
        type: String,
        required: true
    },
    status: {
        type: Boolean,
        required: true
    },
    qtdCreditos: {
        type: Number,
        required: true
    },
    usuario: {
        codigo: {
            type: String,
            required: true
        },
        nome: {
            type: String,
            required: true
        },
        curso_setor: {
            type: String,
            required: true
        },
        turno: {
            type: String,
            required: true
        },
        tipoUsuario: {
            type: String,
            required: true
        }
    }
}, { collection: 'cartoes' });

Belezinha meu aluno? Dai é por isso que você mesmo inserindo em cartoes, ele esta buscando de cartaos.

Desse jeito você deixa fixo com o nome da collection.

E os anjos dizem "amém". O problema era justamente esse. Modifiquei e deu tudo certo. Obrigado pelo feedback Flávio.

Tranquilo Anderson, futuro cangaceiro em JavaScript!

Sucesso e bom estudo!