【发布时间】:2019-08-24 01:01:59
【问题描述】:
我有一个注册表单,可以毫无问题地提交表单数据并将其保存到 mongo 数据库中。但是,当表单出现错误时,我希望后端脚本发回一个标识问题的字符串,即“所需的所有字段”或“密码不匹配”。我不确定我在这里做错了什么,但我似乎无法从前端访问该字符串。
这是我在 node js 中的后端。如果您提交空表单,则会按预期将错误消息“All fields required”输出到后端控制台。但我无法从前端访问它。
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
【问题讨论】:
标签: node.js ajax error-handling