8
respostas

Problema ao tentar salvar log

Ao fazer uma busca estou tentando criar um log e salvá-lo. O servidor executa normalmente, consigo fazer a busca pelo nome, mas não é criado o log com a data atual. Como devo fazer? Segue os códigos.

Model Pessoa

var mongoose = require('mongoose');

var schema = mongoose.Schema({
    status: {
        type: Boolean,
        required: true
    },
    nome: {
        type: String,
        required: true
    }
});

mongoose.model('Pessoa', schema);

Model Log

var mongoose = require('mongoose');

var schema = mongoose.Schema({
    data: {
        type: Date,
        default: Date.now
    },
    nomePessoa: {
        type: String,
        required: true
    }
});

mongoose.model('Log', schema);

Controller Pessoa

var mongoose = require('mongoose');

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

    controller.buscaPorNome = function(req, res){
        model
        .findOne({nome: req.params.nome})
        .then(function(pessoa){
            if(!pessoa){
                res.status(404).json({erro: 'Pessoa não encontrada!'});
            }
            else{
                var pessoaLog = {
                    nomePessoa: pessoa.nome
                };
                model2.create(pessoaLog); // criar log
                res.json(pessoa);
            }

        }, function(error){
            console.log(error);
            res.status(404).json(error);
        });
    };

    return controller;
};
8 respostas

Oi Anderson!

Complicado ler seu código. Quem é model, model2? Sou obrigado a achar o ponto de declaração para entender. Da uma ajeitada nisso para deixar o código ainda melhor. Tipo, como você trabalha com dois modelos agora, dá um nome de Log para um e outro de Pessoa.

Outro ponto:

model2.create(pessoaLog); // criar log

O método create é uma promise. Cadê o then? O res.json só deve ser escrito dentro dele.

Foi isso que vi até agora. Aliás ,você tem certeza que o else esta sendo chamado?

O log é criado mas sem data atual ou nem é criado?

Oi Anderson, aguardo seu feedback.

Opa flávio, realmente ficou um pouco confuso mas você entendeu certo. No caso, o else está sendo executado, porém, se não utilizei a promisse de maneira correta, como deveria fazê-la? Poderia usar ao invés do create, o save? A ideia é criar o log com a data atual, mas ele nem chega a ser criado.

Você já faz isso no seu código, no .findOne. Veja que ele retorna uma promise e você chama then. O create também retorna uma promise. Só fazer a mesma coisa.

Assim:

var pessoaLog = {
    nomePessoa: pessoa.nome
};
model2.create(pessoaLog).then(function() {
    res.json(pessoa);    
}, function(err) {
     res.status(500).json(err);
});

Conseguiu?

Conseguiu?

Consegui pegar a idéia e estou aplicando e fazendo testes. Obrigado pela ajuda.