From e833a2f7e4a5ec32516e3f17763374c0377a4323 Mon Sep 17 00:00:00 2001 From: Matt Zabriskie Date: Thu, 23 Jun 2016 14:55:22 -0600 Subject: [PATCH] Invoke request transformers after request interceptors closes #352 --- lib/core/Axios.js | 22 ---------------------- lib/core/dispatchRequest.js | 27 +++++++++++++++++++++++++++ test/specs/interceptors.spec.js | 33 ++++++++++++++++----------------- 3 files changed, 43 insertions(+), 39 deletions(-) diff --git a/lib/core/Axios.js b/lib/core/Axios.js index 5857604..69dcfae 100644 --- a/lib/core/Axios.js +++ b/lib/core/Axios.js @@ -4,7 +4,6 @@ var defaults = require('./../defaults'); var utils = require('./../utils'); var InterceptorManager = require('./InterceptorManager'); var dispatchRequest = require('./dispatchRequest'); -var transformData = require('./transformData'); var isAbsoluteURL = require('./../helpers/isAbsoluteURL'); var combineURLs = require('./../helpers/combineURLs'); @@ -42,27 +41,6 @@ Axios.prototype.request = function request(config) { config.url = combineURLs(config.baseURL, config.url); } - // Transform request data - config.data = transformData( - config.data, - config.headers, - config.transformRequest - ); - - // Flatten headers - config.headers = utils.merge( - config.headers.common || {}, - config.headers[config.method] || {}, - config.headers || {} - ); - - utils.forEach( - ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], - function cleanHeaderConfig(method) { - delete config.headers[method]; - } - ); - // Hook up interceptors middleware var chain = [dispatchRequest, undefined]; var promise = Promise.resolve(config); diff --git a/lib/core/dispatchRequest.js b/lib/core/dispatchRequest.js index a6b50de..3c8c963 100644 --- a/lib/core/dispatchRequest.js +++ b/lib/core/dispatchRequest.js @@ -1,5 +1,8 @@ 'use strict'; +var utils = require('./../utils'); +var transformData = require('./transformData'); + /** * Dispatch a request to the server using whichever adapter * is supported by the current environment. @@ -8,6 +11,30 @@ * @returns {Promise} The Promise to be fulfilled */ module.exports = function dispatchRequest(config) { + // Ensure headers exist + config.headers = config.headers || {}; + + // Transform request data + config.data = transformData( + config.data, + config.headers, + config.transformRequest + ); + + // Flatten headers + config.headers = utils.merge( + config.headers.common || {}, + config.headers[config.method] || {}, + config.headers || {} + ); + + utils.forEach( + ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], + function cleanHeaderConfig(method) { + delete config.headers[method]; + } + ); + return new Promise(function executor(resolve, reject) { try { var adapter; diff --git a/test/specs/interceptors.spec.js b/test/specs/interceptors.spec.js index fdc58bc..b8f845e 100644 --- a/test/specs/interceptors.spec.js +++ b/test/specs/interceptors.spec.js @@ -39,11 +39,6 @@ describe('interceptors', function () { axios('/foo'); getAjaxRequest().then(function (request) { - request.respondWith({ - status: 200, - responseText: 'OK' - }); - expect(request.method).toBe('POST'); expect(request.url).toBe('/bar'); done(); @@ -64,11 +59,6 @@ describe('interceptors', function () { axios('/foo'); getAjaxRequest().then(function (request) { - request.respondWith({ - status: 200, - responseText: 'OK' - }); - expect(request.requestHeaders.async).toBe('promise'); done(); }); @@ -91,13 +81,6 @@ describe('interceptors', function () { axios('/foo'); getAjaxRequest().then(function (request) { - var request = jasmine.Ajax.requests.mostRecent(); - - request.respondWith({ - status: 200, - responseText: 'OK' - }); - expect(request.requestHeaders.test1).toBe('1'); expect(request.requestHeaders.test2).toBe('2'); expect(request.requestHeaders.test3).toBe('3'); @@ -253,4 +236,20 @@ describe('interceptors', function () { }); }); }); + + it('should execute interceptors before transformers', function (done) { + axios.interceptors.request.use(function (config) { + config.data.baz = 'qux'; + return config; + }); + + axios.post('/foo', { + foo: 'bar' + }); + + getAjaxRequest().then(function (request) { + expect(request.params).toEqual('{"foo":"bar","baz":"qux"}'); + done(); + }); + }); });