node.js - 使用Ajax从后端获取自定义错误消息

标签 node.js ajax error-handling

我有一个注册表单,可以毫无问题地提交并将表单数据保存到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/

相关文章:

node.js - 为什么 Node-Neo4j 无法正确设置数据?

javascript - 为请求禁用一些 jQuery 全局 Ajax 事件处理程序

php - jQuery - 将多维表单数据发送到 PHP 脚本

jQuery:带有 html 实体的 ajax POST

c# - 创建 float 时出现意外符号 'public'

javascript - NodeJS、Express、原型(prototype)中的变量范围问题

javascript - 从 mongodb connect 和 find 返回一个数组

javascript - Node.JS/Express 应用程序中的 Jade 模板找不到外部 Javascript 文件?

python - Flask返回404错误的随机模板

vb.net - 使用自动调整图片框/组框vb.net时出错