【问题标题】:Getting custom error message from backend using ajax使用ajax从后端获取自定义错误消息
【发布时间】: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


    【解决方案1】:

    我将处理错误的后端else 子句更改为

    else {
            res.send(400, 'All fields required');
        }
    

    有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-30
      • 2016-12-17
      • 2018-03-01
      • 2015-12-07
      • 1970-01-01
      • 1970-01-01
      • 2021-07-29
      相关资源
      最近更新 更多