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

Busca com findOne

Meu model tem a seguinte estrutura:

var mongoose = require('mongoose');

var schema = mongoose.Schema({
    status: {
        type: Boolean,
        required: true
    },
    usuario: {
        codigo: {
            type: String,
            required: true
        },
        nome: {
            type: String,
            required: true
        },
       tipoUsuario: {
            type: String,
            required: true
        }
    }
});
mongoose.model('Cartao', schema);

Tenho o arquivo de rotas pra buscar pelo código:

module.exports = function(app){
    var controller = app.controllers.cartaoController;

    app.route('/cartoes/:codigo')
        .get(controller.buscaPorCodigo);
};

No meu controller faço a busca pelo código:


var mongoose = require('mongoose');

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

    controller.buscaPorCodigo = function(req, res){
        model
        .findOne({usuario.codigo: req.params.codigo})
        .then(function(cartao){
            if(!cartao) 
                res.status(404).json({erro: 'Cartão não encontrado!'});
             res.json(cartao);
        }, function(error){
            console.log(error);
            res.status(404).json(error);
        });
    };

    return controller;
};

Porém, ao tentar levantar o projeto, ele acusa um erro de sintaxe na linha

        .findOne({usuario.codigo: req.params.codigo})

Pelo visto, ele não consegue encontrar o código que está de usuário que por sua vez está dentro de cartão. Como faço essa busca?

3 respostas

Miranda, sempre que for tirar dúvida de um erro no seu código, poste a mensagem de erro. Você diz que há um erro de sintaxe, mas qual? Por isso o erro é importante.

Aguardo a mensagem de erro.

solução!

Bom, eu pedi para você enviar por ganhar o hábito, mas o problema esta aqui:

        .findOne({usuario.codigo: req.params.codigo})

Nunca uma propriedade de um JSON pode conter . , por exemplo, usuario.codigo. É por isso que se precisarmos que uma propriedade tenha ponto, fazermos o seguinte:

        .findOne({ 'usuario.codigo' : req.params.codigo})

Viu que coloquei entre aspas simples (ou duplas se você preferir).

Abraço meu aluno.

Vou me lembrar de colocar o erro na próxima. O problema era esse mesmo, obrigado professor e até a próxima dúvida. Rsrs