我有一个注册表单,可以毫无问题地提交并将表单数据保存到mongo数据库中。但是,当表格出现错误时,我希望后端脚本发回一个标识问题的字符串,即“所有必填字段”或“密码不匹配”。我不确定自己在做什么错,但是我似乎无法从前端访问该字符串。
这是我在node js中的后端。如果您提交空白表格,则错误消息“所有必填字段”将按预期输出到后端控制台。但是我无法从前端访问它。
router.post("/register", function(req, res, next) {
if (req.body.email &&
req.body.username &&
req.body.password &&
req.body.confirmPassword) {
// confirm that user typed same password twice
if (req.body.password !== req.body.confirmPassword) {
var err = new Error("Passwords do not match.");
err.status = 400;
return next(err);
}
// create object with form input
var userData = {
email: req.body.email,
username: req.body.username,
password: req.body.password
};
User.create(userData, function (error, user) {
if (error) {
return next(error);
} else {
req.session.userId = user._id;
req.session.username = user.username;
return res.redirect(`/profile/${user.username}`);
}
});
} else {
var err = new Error("All fields required");
err.status = 400;
console.log("Error " + JSON.stringify(err)); // THis is ok
return next(err); // This doesn't seem to be working properly
}
})
这是我的前端ajax发布到服务器。
$("#register-form").submit(function(e) {
e.preventDefault();
var form = $(this);
var url = form.attr('action');
$.ajax({
type: "POST",
url: url,
data: form.serialize(),
})
.done(function(){
alert("Done");
})
.fail(function(a, b, c) {
console.log("a " + typeof a + " " + a + " " + JSON.stringify(a));
console.log("b " + typeof b + " " + b);
console.log("c " + typeof c + " " + c);
})
});
前端控制台输出为:
a object [object Object] {"readyState":0,"status":0,"statusText":"error"}
b string error
c string
最佳答案
我将后端else
子句更改为
else {
res.send(400, 'All fields required');
}
有用。
关于node.js - 使用Ajax从后端获取自定义错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57634378/