有人可以解释为什么还不回来吗?

时间:2019-05-26 17:19:12

标签: javascript node.js mongoose

我尝试了这段代码,但是我可以理解发生了什么。

save: function(req, res){
    // Recoger los parametros de la peticion
    var params = req.body;

    // Validar los datos
    var validate_name = !validator.isEmpty(params.name);
    var validate_surname = !validator.isEmpty(params.surname);;
    var validate_email = !validator.isEmpty(params.email) && validator.isEmail(params.email);       
    var validate_password = !validator.isEmpty(params.password);


    if(validate_name && validate_surname && validate_email &&validate_password){
        console.log('Validado');
        // Crear Objeto de usuario
        var user = new User();

        // Asignar valores al usuario
        user.name = params.name;
        user.surname = params.surname;
        user.email = params.email.toLowerCase();
        user.role = 'ROLE_USER';
        user.image = null;

        user.password = bcrypt.hashSync(params.password,10);


        //Comprobar si el usuario existe 
        User.findOne({email: user.email}, (err, issetUser) => {
            if(err){
                return res.status(400).send({
                    'message': "Registro de usuario fallido por duplicidad 1"
                });
            }else{
                console.log('Estoy por aca');                                   
                if(!issetUser){       
                    console.log('Estoy por aca2'); 
                    //Guardar el usuario
                    user.save((err, userStored)=>{
                        if(err){
                            return res.status(500).send({
                                'message': "No se pudo grabar el usuario"
                            });
                        } else{
                            if(!userStored){
                                return res.status(500).send({
                                    'message': "No se pudo grabar el usuario"
                                });
                            } else{
                                // Devolver respuesta                        
                                return res.status(500).send({'message': "Registro de usuario exitoso" });
                            }}
                    });
                    console.log('No deberia estar aca');
                }else{  
                    console.log('El usuario esta registrado en la DB');                   
                    return res.status(500).send({
                        'message': "Registro de usuario fallido 3"
                    });
                }
            }   
        });
    }else{
        return res.status(500).send({'message': "El usuario existe en la DB 5"});
    }   
    return res.status(500).send({'message': "Registro de usuario fallido 6" });          
}

例如,我(由邮递员)发送了一个数据库中存在的寄存器。因此,我希望在控制台上显示:El usuario esta registrado en la DB并返回“ Registro de usuario fallido 3”,但是,通过控制台显示:

  

Validado
  Estoy por aca
  数据库的使用权登记制度

并崩溃并显示消息:

  

投掷者; //未处理的“错误”事件

在邮递员返回中:“消息”:“ Registro de usuario fallido 6” 所以,如果我在前面放一个返回值,该程序将如何继续到最后? 为什么程序崩溃?

谢谢你,抱歉我的英语水平

1 个答案:

答案 0 :(得分:0)

发生崩溃是因为您两次调用res.send()。

代码的最后一行:

return res.status(500).send({'message': "Registro de usuario fallido 6" });
不管mongo的响应如何,都会执行

这就是为什么在邮递员中收到消息“ Registro de usuario fallido 6”的原因。

您的猫鼬请求发回给现有用户,然后您尝试再次调用res.send。

注释最后一行,您的代码应该可以正常工作。