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

Validação dos campos da aplicação

Cavalheiros, Criei uma aplicação caseira baseada nos treinamentos avançados de JS, e quando tento gravar o objeto no MongoDB recebo o seguinte erro:

{"errors":{"horaSaida":{"message":"Path `horaSaida` is required.","name":"ValidatorError","properties":{"type":"required","message":"Path `{PATH}` is required.","path":"horaSaida"},"kind":"required","path":"horaSaida"},"retornoIntervalo":{"message":"Path `retornoIntervalo` is required.","name":"ValidatorError","properties":{"type":"required","message":"Path `{PATH}` is required.","path":"retornoIntervalo"},"kind":"required","path":"retornoIntervalo"},"inicioIntervalo":{"message":"Path `inicioIntervalo` is required.","name":"ValidatorError","properties":{"type":"required","message":"Path `{PATH}` is required.","path":"inicioIntervalo"},"kind":"required","path":"inicioIntervalo"},"horaEntrada":{"message":"Path `horaEntrada` is required.","name":"ValidatorError","properties":{"type":"required","message":"Path `{PATH}` is required.","path":"horaEntrada"},"kind":"required","path":"horaEntrada"},"dataDia":{"message":"Path `dataDia` is required.","name":"ValidatorError","properties":{"type":"required","message":"Path `{PATH}` is required.","path":"dataDia"},"kind":"required","path":"dataDia"}},"message":"CadastrosPonto validation failed","name":"ValidationError"}

No módulo de criação do esquema do mongoose eu criei o seguinte schema:

var mongoose = require('mongoose');

var schema = mongoose.Schema({

    dataDia : {
        type : Date,
        required : true
    },
    horaEntrada : {
        type : String,
        required : true
    },
    inicioIntervalo : {
        type : String,
        required : true
    },
    retornoIntervalo : {
        type : String,
        required : true
    },
    horaSaida : {
        type : String,
        required : true
    }
});

mongoose.model('CadastrosPonto', schema);

O módulo de API para cadastrar no mongo esta dessa forma:

api.adicionarCadastroPonto = function(req, res){

    var cp = req.body;

    model.create(cp)
        .then(function(cadastroPontoRetornadoMongoDB){

            res.json(cadastroPontoRetornadoMongoDB);
        }, function(error){

            console.log(error);
            res.status(500).json(error);
        });
};

A questão é, eu não faço idéia de como e onde validar os dados que são enviados da minha aplicação caseira para o MongoDB. Se alguém puder ajudar, desde já eu agradeço!

2 respostas
solução!

Oi Rômulo. O mongoose já te deu metade da solução apontado que horaSaida é obrigatório. Então, e agora?

Em primeiro lugar, sua aplicação SPA não deveria ter deixado o dado inválido ser enviado. Há um erro de lógica no seu programa que esta permitindo isso. No curso de Angular 1 .X eu ensino validação de formulário. Aqui não consta para mim que você fez esse curso. Ele é pré-requisito do de MEAN. Não faz sentido fazer esse curso sem ter conhecimento de Angular.

Em segundo lugar, para garantir no servidor, você deve fazer a mesma validação. Antes de chamar o create na API você deve verificar a integridade do dado que chegou e deixar chamar create apenas se os dados estão corretos.

É bem básico mesmo, tão básico que envolve apenas o uso de if's. Se não tiver preenchido, você devolve um código de status de erro, aquele que você achar mais indicado e a mensagem, talvez um 409 para indicar conflito, assim res.status(409).json('Dados inválidos');'.

Se você configurou lá no Angular o callback de erro receberá a mensagem neste callback.

Oi Flávio! Obrigado pelo retorno, você tem toda razão eu não fiz o curso de Angular, vou correndo já começar e ver esses detalhes, muito obrigado!