2
0
mirror of https://github.com/tenrok/axios.git synced 2026-06-23 20:40:40 +03:00

Move transform response logic from adapters to dispatcher

This commit is contained in:
Matt Zabriskie
2016-06-23 15:11:35 -06:00
parent e833a2f7e4
commit 10eb238651
4 changed files with 20 additions and 16 deletions
+3 -7
View File
@@ -6,7 +6,6 @@ The modules under `adapters/` are modules that handle dispatching a request and
```js ```js
var settle = require('./../core/settle'); var settle = require('./../core/settle');
var transformData = require('./../core/transformData');
module.exports myAdapter(resolve, reject, config) { module.exports myAdapter(resolve, reject, config) {
// At this point: // At this point:
@@ -14,15 +13,11 @@ module.exports myAdapter(resolve, reject, config) {
// - request transformers have already run // - request transformers have already run
// - request interceptors have already run // - request interceptors have already run
// Make the request using config provided/ // Make the request using config provided
// Upon response settle the Promise // Upon response settle the Promise
var response = { var response = {
data: transformData( data: responseData,
responseData,
responseHeaders,
config.transformResponse
),
status: request.status, status: request.status,
statusText: request.statusText, statusText: request.statusText,
headers: responseHeaders, headers: responseHeaders,
@@ -33,6 +28,7 @@ module.exports myAdapter(resolve, reject, config) {
settle(resolve, reject, response); settle(resolve, reject, response);
// From here: // From here:
// - response transformers will run
// - response interceptors will run // - response interceptors will run
} }
``` ```
+3 -2
View File
@@ -2,7 +2,6 @@
var utils = require('./../utils'); var utils = require('./../utils');
var settle = require('./../core/settle'); var settle = require('./../core/settle');
var transformData = require('./../core/transformData');
var buildURL = require('./../helpers/buildURL'); var buildURL = require('./../helpers/buildURL');
var http = require('http'); var http = require('http');
var https = require('https'); var https = require('https');
@@ -117,6 +116,7 @@ module.exports = function httpAdapter(resolve, reject, config) {
config: config, config: config,
request: req request: req
}; };
if (config.responseType === 'stream') { if (config.responseType === 'stream') {
response.data = stream; response.data = stream;
settle(resolve, reject, response); settle(resolve, reject, response);
@@ -141,7 +141,8 @@ module.exports = function httpAdapter(resolve, reject, config) {
if (config.responseType !== 'arraybuffer') { if (config.responseType !== 'arraybuffer') {
responseData = responseData.toString('utf8'); responseData = responseData.toString('utf8');
} }
response.data = transformData(responseData, res.headers, config.transformResponse);
response.data = responseData;
settle(resolve, reject, response); settle(resolve, reject, response);
}); });
} }
+5 -7
View File
@@ -2,7 +2,6 @@
var utils = require('./../utils'); var utils = require('./../utils');
var settle = require('./../core/settle'); var settle = require('./../core/settle');
var transformData = require('./../core/transformData');
var buildURL = require('./../helpers/buildURL'); var buildURL = require('./../helpers/buildURL');
var parseHeaders = require('./../helpers/parseHeaders'); var parseHeaders = require('./../helpers/parseHeaders');
var isURLSameOrigin = require('./../helpers/isURLSameOrigin'); var isURLSameOrigin = require('./../helpers/isURLSameOrigin');
@@ -24,7 +23,10 @@ module.exports = function xhrAdapter(resolve, reject, config) {
// For IE 8/9 CORS support // For IE 8/9 CORS support
// Only supports POST and GET calls and doesn't returns the response headers. // Only supports POST and GET calls and doesn't returns the response headers.
// DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest. // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.
if (process.env.NODE_ENV !== 'test' && typeof window !== 'undefined' && window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) { if (process.env.NODE_ENV !== 'test' &&
typeof window !== 'undefined' &&
window.XDomainRequest && !('withCredentials' in request) &&
!isURLSameOrigin(config.url)) {
request = new window.XDomainRequest(); request = new window.XDomainRequest();
loadEvent = 'onload'; loadEvent = 'onload';
xDomain = true; xDomain = true;
@@ -60,11 +62,7 @@ module.exports = function xhrAdapter(resolve, reject, config) {
var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null; var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;
var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response; var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;
var response = { var response = {
data: transformData( data: responseData,
responseData,
responseHeaders,
config.transformResponse
),
// IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201) // IE sends 1223 instead of 204 (https://github.com/mzabriskie/axios/issues/201)
status: request.status === 1223 ? 204 : request.status, status: request.status === 1223 ? 204 : request.status,
statusText: request.status === 1223 ? 'No Content' : request.statusText, statusText: request.status === 1223 ? 'No Content' : request.statusText,
+9
View File
@@ -56,6 +56,15 @@ module.exports = function dispatchRequest(config) {
} catch (e) { } catch (e) {
reject(e); reject(e);
} }
}).then(function onFulfilled(response) {
// Transform response data
response.data = transformData(
response.data,
response.headers,
config.transformResponse
);
return response;
}); });
}; };