http-link-dataloader icon indicating copy to clipboard operation
http-link-dataloader copied to clipboard

Handle non-array errors gracefully

Open jacobpgn opened this issue 5 years ago • 3 comments

If results is not an array here, something has probably gone really wrong.

In production we're typically seeing this when some part of the world between our GraphQL server and client blows up and returns an HTML error page. Spreading results when it's a string creates really unusable errors like this:

GraphQL Error: {
  "0": "\n",
  "1": "<",
  "2": "!",
  "3": "d",
  "4": "o",
  "5": "c",
  "6": "t",
  "7": "y",
  "8": "p",
  "9": "e",
  "10": " ",
  "11": "h",
  "12": "t",
  "13": "m",
  "14": "l",
  "15": ">",
  "16": "\n",
  "17": "<",
  "18": "h",
  "19": "t",
  "20": "m",
  "21": "l",
  "22": ">",
  "23": "\n",
  "24": "<",
  "25": "h",
  "26": "e",
  "27": "a",
  "28": "d",
  "29": ">",
  "30": "\n",
  "31": " ",
  "32": " ",
  "33": " ",
  "34": " ",
  "35": "<",
  "36": "t",
  "37": "i",
  "38": "t",
  "39": "l",
  "40": "e",
  "41": ">",
  "42": "E",
  "43": "x",
  "44": "a",
  "45": "m",
  "46": "p",
  "47": "l",
  "48": "e",
  "49": " ",
  "50": "D",
  "51": "o",
  "52": "m",
  "53": "a",
  "54": "i",
  "55": "n",
  "56": "<",
  "57": "/",
  "58": "t",
  "59": "i",
  "60": "t",
  "61": "l",
  "62": "e",
  "63": ">",
  "64": "\n",
  "65": "\n",
  "66": " ",
  "67": " ",
  "68": " ",
  "69": " ",

... snipped!

  "1252": "/",
  "1253": "h",
  "1254": "t",
  "1255": "m",
  "1256": "l",
  "1257": ">",
  "1258": "\n",
  "status": 502
}

With this change it'd instead be the slightly-more-debuggable:

Invalid response: \n<!doctype html>\n<html>\n<head>\n    <title>Example Domain</title>\n\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    <style type=\"text/css\">\n    body {\n        background-color: #f0f0f2;\n        margin: 0;\n        padding: 0;\n        font-family: \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n\n    }\n    div {\n        width: 600px;\n        margin: 5em auto;\n        padding: 50px;\n        background-color: #fff;\n        border-radius: 1em;\n    }\n    a:link, a:visited {\n        color: #38488f;\n        text-decoration: none;\n    }\n    @media (max-width: 700px) {\n        body {\n            background-color: #fff;\n        }\n        div {\n            width: auto;\n            margin: 0 auto;\n            border-radius: 0;\n            padding: 1em;\n        }\n    }\n    </style>\n</head>\n\n<body>\n<div>\n    <h1>Example Domain</h1>\n    <p>This domain is established to be used for illustrative examples in documents. You may use this\n    domain in examples without prior coordination or asking for permission.</p>\n    <p><a href=\"http://www.iana.org/domains/example\">More information...</a></p>\n</div>\n</body>\n</html>\n

@timsuchanek 👋 hi! Do you think it'd be suitable to get this in and bump prisma-binding?

jacobpgn avatar May 21 '19 15:05 jacobpgn

Hi @jacobpgn, how did you resolve this?

Gdewilde avatar Mar 31 '21 01:03 Gdewilde

Hey @Gdewilde! Sorry, I'm not using this package any more so I don't have a good solution to share.

jacobpgn avatar Mar 31 '21 14:03 jacobpgn

No worries! Thanks for the update

Gdewilde avatar Apr 05 '21 17:04 Gdewilde