diff --git a/lib/adapters/http.js b/lib/adapters/http.js index 10ad580..3048e57 100644 --- a/lib/adapters/http.js +++ b/lib/adapters/http.js @@ -172,13 +172,14 @@ module.exports = function httpAdapter(config) { // make sure the content length is not over the maxContentLength if specified if (config.maxContentLength > -1 && Buffer.concat(responseBuffer).length > config.maxContentLength) { - reject(createError('maxContentLength size of ' + config.maxContentLength + ' exceeded', config)); + reject(createError('maxContentLength size of ' + config.maxContentLength + ' exceeded', + config, null, lastRequest)); } }); stream.on('error', function handleStreamError(err) { if (aborted) return; - reject(enhanceError(err, config)); + reject(enhanceError(err, config, null, lastRequest)); }); stream.on('end', function handleStreamEnd() { @@ -196,14 +197,14 @@ module.exports = function httpAdapter(config) { // Handle errors req.on('error', function handleRequestError(err) { if (aborted) return; - reject(enhanceError(err, config)); + reject(enhanceError(err, config, null, req)); }); // Handle request timeout if (config.timeout && !timer) { timer = setTimeout(function handleRequestTimeout() { req.abort(); - reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED')); + reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED', req)); aborted = true; }, config.timeout); } diff --git a/lib/adapters/xhr.js b/lib/adapters/xhr.js index befd4fb..6cbce35 100644 --- a/lib/adapters/xhr.js +++ b/lib/adapters/xhr.js @@ -84,7 +84,7 @@ module.exports = function xhrAdapter(config) { request.onerror = function handleError() { // Real errors are hidden from us by the browser // onerror should only fire if it's a network error - reject(createError('Network Error', config)); + reject(createError('Network Error', config, null, request)); // Clean up request request = null; @@ -92,7 +92,8 @@ module.exports = function xhrAdapter(config) { // Handle timeout request.ontimeout = function handleTimeout() { - reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED')); + reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED', + request)); // Clean up request request = null; diff --git a/lib/core/createError.js b/lib/core/createError.js index aa9abfd..6b31165 100644 --- a/lib/core/createError.js +++ b/lib/core/createError.js @@ -3,15 +3,16 @@ var enhanceError = require('./enhanceError'); /** - * Create an Error with the specified message, config, error code, and response. + * Create an Error with the specified message, config, error code, request and response. * * @param {string} message The error message. * @param {Object} config The config. * @param {string} [code] The error code (for example, 'ECONNABORTED'). + @ @param {Object} [request] The request. @ @param {Object} [response] The response. * @returns {Error} The created error. */ -module.exports = function createError(message, config, code, response) { +module.exports = function createError(message, config, code, request, response) { var error = new Error(message); - return enhanceError(error, config, code, response); + return enhanceError(error, config, code, request, response); }; diff --git a/lib/core/enhanceError.js b/lib/core/enhanceError.js index adf836f..23e5011 100644 --- a/lib/core/enhanceError.js +++ b/lib/core/enhanceError.js @@ -6,14 +6,16 @@ * @param {Error} error The error to update. * @param {Object} config The config. * @param {string} [code] The error code (for example, 'ECONNABORTED'). + @ @param {Object} [request] The request. @ @param {Object} [response] The response. * @returns {Error} The error. */ -module.exports = function enhanceError(error, config, code, response) { +module.exports = function enhanceError(error, config, code, request, response) { error.config = config; if (code) { error.code = code; } + error.request = request; error.response = response; return error; }; diff --git a/lib/core/settle.js b/lib/core/settle.js index 00ed636..8db5e23 100644 --- a/lib/core/settle.js +++ b/lib/core/settle.js @@ -19,6 +19,7 @@ module.exports = function settle(resolve, reject, response) { 'Request failed with status code ' + response.status, response.config, null, + response.request, response )); }