Coder Social home page Coder Social logo

Explicit Error classes about got HOT 8 CLOSED

sindresorhus avatar sindresorhus commented on May 2, 2024
Explicit Error classes

from got.

Comments (8)

floatdrop avatar floatdrop commented on May 2, 2024

Something like this:

diff --git a/index.js b/index.js
index 44f453a..b4bafb6 100644
--- a/index.js
+++ b/index.js
@@ -41,7 +32,7 @@ function requestAsEventEmitter(opts) {
                res.resume();

                if (++redirectCount > 10) {
-                   ee.emit('error', new GotError('Redirected 10 times. Aborting.'), undefined, res);
+                   ee.emit('error', new MaxRedirectsError(statusCode, {url: url}), undefined, res);
                    return;
                }

@@ -70,7 +61,7 @@ function requestAsEventEmitter(opts) {

            ee.emit('response', res);
        }).once('error', function (err) {
-           ee.emit('error', new GotError('Request to ' + url + ' failed', err));
+           ee.emit('error', new RequestError(err.message, {url: url, method: opts.method}));
        });

        if (opts.timeout) {
@@ -101,22 +92,21 @@ function asCallback(opts, cb) {
    ee.on('response', function (res) {
        readAllStream(res, opts.encoding, function (err, data) {
            if (err) {
-               cb(new GotError('Reading ' + url + ' response failed', err), null, res);
+               cb(new ReadError(err.message, {url: url}), null, res);
                return;
            }

            var statusCode = res.statusCode;

            if (statusCode < 200 || statusCode > 299) {
-               err = new GotError(opts.method + ' ' + url + ' response code is ' + statusCode + ' (' + http.STATUS_CODES[statusCode] + ')', err);
-               err.code = statusCode;
+               err = new HTTPError(statusCode, {url: url, method: opts.method});
            }

            if (opts.json && statusCode !== 204) {
                try {
                    data = JSON.parse(data);
                } catch (e) {
-                   err = new GotError('Parsing ' + url + ' response failed', new GotError(e.message, err));
+                   err = new ParseError(err.message, {url: url});
                }
            }

from got.

sindresorhus avatar sindresorhus commented on May 2, 2024

πŸ‘

from got.

kevva avatar kevva commented on May 2, 2024

Yup, I like it too. +1 for more clarity.

from got.

floatdrop avatar floatdrop commented on May 2, 2024

Done in 1fe1e9a - please review πŸ˜ƒ

from got.

floatdrop avatar floatdrop commented on May 2, 2024

There is one question, that's bothers me: should we store statusCode as code property? It was discussed in #9, but in other places people tend to use statusCode ((https://github.com/trentm/node-bunyan#log-record-fields, https://github.com/jshttp/http-errors).

from got.

sindresorhus avatar sindresorhus commented on May 2, 2024

I prefer statusCode as it's a clearer intent.

from got.

sindresorhus avatar sindresorhus commented on May 2, 2024

@floatdrop What happened to floatdrop@58bfb20 in the 4.0.0 PR? Did you back out of it?

from got.

floatdrop avatar floatdrop commented on May 2, 2024

@sindresorhus yup, I will send a PR with this soon.

from got.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.