无法阅读财产' _id'使用express-validator时出现未定义的错误

时间:2016-07-10 17:44:47

标签: node.js mongodb express

我正在使用' express-validator'检查我的表单,插入此检查通常是转发问题发生错误。 无法阅读财产' _id'未定义的。

以下代码:

用户控制器

var validacao = require('../validacoes/usuarios');
edit:function(req, res){
        Usuario.findById(req.params.id, function(err, data){
            if(err){
                req.flash('erro', 'erro ao editar usuario' + err);
                res.redirect('/usuarios');
            }else{
                res.render('usuarios/edit', {dados: data})
            }
        });
    }, 

    update:function(req, res){
        if(validacao(req, res)){
            Usuario.findById(req.params.id, function(err, data){
                var model = data;
                model.nome = req.body.nome;
                model.site = req.body.site;
                model.email= req.body.email;
                model.save(function(err){
                    if(err){
                        req.flash('erro', 'erro ao editar usuario' + err);
                        res.render('usuarios/edit', {dados: model});
                    }else{
                        req.flash('info', 'registro atualizado com sucesso!');
                        res.redirect('/usuarios');
                    }   
                });
            });
        }else{
            res.render('usuarios/edit', {user: req.body});
        }
    }

控制器我导出一个外部文件,我有验证规则:

以下代码:

 var url = require('url');

  module.exports = function(req, res){
  var createUrl = url.parse(req.url).pathname == "/usuarios/create";
  var updateUrl = !createUrl;   

  req.assert('nome', 'Informe o seu nome').notEmpty();
  req.assert('email', 'Email inválido').isEmail();
  req.assert('site', 'Site não tem a url válida').isURL();

     if(createUrl){
         req.assert('password', 'sua senha deve conter 6 ate 20  caracteres').len(6,20);
     }

 var validateErros = req.validationErrors() || [];

if(req.body.password != req.body.password_confirmar){
    validateErros.push({msg: 'Senhas diferentes'});
}

 if(validateErros.length > 0){
    validateErros.forEach(function(e){
        req.flash('erro', e.msg);
    });
    return false;
}else{
    return true;
}
}

感谢您的关注

1 个答案:

答案 0 :(得分:0)

Usuario.findById(req.params.id, function(err, data){
     if(err) {
           req.flash('erro', 'erro ao editar usuario' + err);
           res.redirect('/usuarios');
     } else {
           res.render('usuarios/edit', {dados: data})
     }
});

好吧,当req.params.id不存在于数据库中时,错误将不存在,并且数据的值为null,请确保在数据大小为=== null时闪烁消息。< / p>

Usuario.findById(req.params.id, function(err, data){
    if(err) {
       req.flash('erro', 'erro ao editar usuario' + err);
       res.redirect('/usuarios');
     } else if (!data) {
       req.flash('erro', 'user don\'t exist');
       res.redirect('/usuarios');  
     }
     res.render('usuarios/edit', {dados: data})
});