如何在Node / Express的客户端中正确呈现服务器端错误?

时间:2018-05-03 09:18:18

标签: node.js express error-handling httprequest

我已经设置了一个简单的Node / Express服务,可以为数据库创建新的书签。

在我的书签架构中,其中一个字段url具有验证。当您尝试在没有正确验证的情况下创建新书签时,会抛出错误和消息。

E.g。如果您没有为请求提供网址,则会发出消息Please provide a url.

POST请求创建新书签的路径:

app.post(
    '/api/bookmarks',
    (req, res) => {
      const { url, tags } = req.body;

      const bookmark = new Bookmark({
        url,
        tags
      });

      bookmark.save()
        .then(res => {
          res.send(result)
        })
        .catch(error => {
          console.log("err:", error);
          res.status(400).send(error)
        });
    }
  );

我的书签架构是什么样的:

const bookmarkSchema = new Schema({
  url: {
    type: String,
    required: [true, "Please provide a URL."],
    match: [urlRegex, "Your URL is invalid. Please make sure to add www."]
  },
  tags: [String]
});

当我在前端客户端上进行API调用时(例如通过React),我能够捕获错误和后续消息(Please provide a URL.),但正如您所看到的,我必须调用{{ 1}}这看起来非常冗长和冗长。

err.response.data.errors.url.message

我在想什么 - 有更好的方法来渲染错误吗?是否更好地处理客户端错误?

我对错误处理很陌生,所以想知道什么是最佳做法。

谢谢!

1 个答案:

答案 0 :(得分:0)

像这样的东西。所以你不必在架构中检查它。

app.post(
    '/api/bookmarks',
    (req, res) => {
      const { url, tags } = req.body;
      if (!url) {
        res.status(400).send({error: "URL is missing"})
        return;
      }
      if (!url.match(urlRegex) {
        res.status(400).send({error: "URL is not valid"})
        return;
      }
      const bookmark = new Bookmark({
        url,
        tags
      });

      bookmark.save()
        .then(res => {
          res.send(result)
        })
        .catch(error => {
          console.log("err:", error);
          res.status(500)
        });
    }
  );

将服务器端错误发送到前端是一种不好的做法。这是泄漏有关数据库/后端信息的简单方法。您应该发送自己的字符串消息而不是捕获错误。