From ef8bdeb22655e06ebe320b580bb0eae4d03f336d Mon Sep 17 00:00:00 2001 From: Vsevolod Strukchinsky Date: Fri, 6 Feb 2015 13:55:47 +0500 Subject: [PATCH] Improve error message on not 2xx code Closes #38 --- index.js | 5 +++-- package.json | 1 + test/test-error.js | 29 +++++++++++++++++++++++++++++ 3 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 test/test-error.js diff --git a/index.js b/index.js index cef9b9d0a..d2b2cd461 100644 --- a/index.js +++ b/index.js @@ -11,6 +11,7 @@ var read = require('read-all-stream'); var timeout = require('timed-out'); var prependHttp = require('prepend-http'); var lowercaseKeys = require('lowercase-keys'); +var status = require('statuses'); function got(url, opts, cb) { if (typeof opts === 'function') { @@ -65,7 +66,7 @@ function got(url, opts, cb) { var res = response; // redirect - if (statusCode >= 300 && statusCode < 400 && 'location' in res.headers) { + if (status.redirect[statusCode] && 'location' in res.headers) { res.resume(); // Discard response if (++redirectCount > 10) { @@ -85,7 +86,7 @@ function got(url, opts, cb) { if (statusCode < 200 || statusCode > 299) { read(res, encoding, function (error, data) { - var err = error || new Error('Couldn\'t connect to ' + url + '.'); + var err = error || new Error(url + ' response code is ' + statusCode + ' (' + status[statusCode] + ')'); err.code = statusCode; cb(err, data, response); }); diff --git a/package.json b/package.json index 786788e2a..b21b8f131 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "object-assign": "^2.0.0", "prepend-http": "^1.0.0", "read-all-stream": "^1.0.0", + "statuses": "^1.2.1", "timed-out": "^2.0.0" }, "devDependencies": { diff --git a/test/test-error.js b/test/test-error.js new file mode 100644 index 000000000..2a62620a6 --- /dev/null +++ b/test/test-error.js @@ -0,0 +1,29 @@ +'use strict'; +var tape = require('tape'); +var got = require('../'); +var server = require('./server.js'); +var s = server.createServer(); + +s.on('/', function (req, res) { + res.statusCode = 404; + res.end('not'); +}); + +tape('setup', function (t) { + s.listen(s.port, function () { + t.end(); + }); +}); + +tape('error message', function (t) { + got(s.url, function (err) { + t.ok(err); + t.equal(err.message, 'http://localhost:6767 response code is 404 (Not Found)'); + t.end(); + }); +}); + +tape('cleanup', function (t) { + s.close(); + t.end(); +});