5

好的,事情就是这样,我正在尝试弄清楚如何使用 graphql-js 处理错误。(在没有继电器的情况下)

不够具体!?好的,因为 graphql-js 正在捕获解析函数中抛出的所有错误,所以我对如何正确处理错误和 http 响应有点困惑。

所以我没有什么想法,想知道你的想法!

  1. 即使包含错误,也始终使用 graphql 响应返回 200 OK。(不喜欢那个)

  2. 在 result.errors[0] 上切换大小写并针对错误返回 http 响应,如果没有错误则返回 result.data。(这最终可能是一个非常长的开关盒)

    • 处理 resolve 函数和 throw 和 object 中的错误处理(例如{ httpCode: 404, msg: 'No X found with the requested id' }

    • 在 express app.post 函数(或任何 Web 框架)中,具有以下内容:

      app.post('/graphql', function(req, res) {
        let result = await graphql(req.body);
      
        if(result.errors.size) {
          let e = result.errors[0];
          res.status(e.httpCode).send(e.msg);
        }
      
        res.json(result.data);
      }
      

    由于错误对象的编组方式,这目前不起作用......或者至少我还没有找到如何将它从 graphql 中取出。我正在考虑可能会研究 graphql-js 源,但我想我最好先问你们,因为我可能会遗漏一些明显的东西。

显然,欢迎有更好的主意!

干杯:D

4

1 回答 1

1

我也在试图弄清楚这一点。

我设法想出的最好办法是在我的解析器中抛出一个自定义错误。查看apollo-errors。我不确定这是否是最好的方法,但它可能对你有用。

于 2016-11-25T17:56:23.760 回答