我尝试了这段代码,但是我可以理解发生了什么。
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” 所以,如果我在前面放一个返回值,该程序将如何继续到最后? 为什么程序崩溃?
谢谢你,抱歉我的英语水平
答案 0 :(得分:0)
发生崩溃是因为您两次调用res.send()。
代码的最后一行:
return res.status(500).send({'message': "Registro de usuario fallido 6" });
不管mongo的响应如何,都会执行。
这就是为什么在邮递员中收到消息“ Registro de usuario fallido 6”的原因。
您的猫鼬请求发回给现有用户,然后您尝试再次调用res.send。
注释最后一行,您的代码应该可以正常工作。