0c957a779cb1508ef1e1dc1ca3e5aa36b817f168a6666e6736141597d7e4db32a5cfd7e4c1a7ad050d0ca4defce69be66b4d634fef41ab5a19abdbe1fde1c3 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. 'use strict';
  2. var utils = require('./../utils');
  3. var transformData = require('./transformData');
  4. var isCancel = require('../cancel/isCancel');
  5. var defaults = require('../defaults');
  6. var CanceledError = require('../cancel/CanceledError');
  7. var normalizeHeaderName = require('../helpers/normalizeHeaderName');
  8. /**
  9. * Throws a `CanceledError` if cancellation has been requested.
  10. */
  11. function throwIfCancellationRequested(config) {
  12. if (config.cancelToken) {
  13. config.cancelToken.throwIfRequested();
  14. }
  15. if (config.signal && config.signal.aborted) {
  16. throw new CanceledError();
  17. }
  18. }
  19. /**
  20. * Dispatch a request to the server using the configured adapter.
  21. *
  22. * @param {object} config The config that is to be used for the request
  23. * @returns {Promise} The Promise to be fulfilled
  24. */
  25. module.exports = function dispatchRequest(config) {
  26. throwIfCancellationRequested(config);
  27. // Ensure headers exist
  28. config.headers = config.headers || {};
  29. // Transform request data
  30. config.data = transformData.call(
  31. config,
  32. config.data,
  33. config.headers,
  34. null,
  35. config.transformRequest
  36. );
  37. normalizeHeaderName(config.headers, 'Accept');
  38. normalizeHeaderName(config.headers, 'Content-Type');
  39. // Flatten headers
  40. config.headers = utils.merge(
  41. config.headers.common || {},
  42. config.headers[config.method] || {},
  43. config.headers
  44. );
  45. utils.forEach(
  46. ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],
  47. function cleanHeaderConfig(method) {
  48. delete config.headers[method];
  49. }
  50. );
  51. var adapter = config.adapter || defaults.adapter;
  52. return adapter(config).then(function onAdapterResolution(response) {
  53. throwIfCancellationRequested(config);
  54. // Transform response data
  55. response.data = transformData.call(
  56. config,
  57. response.data,
  58. response.headers,
  59. response.status,
  60. config.transformResponse
  61. );
  62. return response;
  63. }, function onAdapterRejection(reason) {
  64. if (!isCancel(reason)) {
  65. throwIfCancellationRequested(config);
  66. // Transform response data
  67. if (reason && reason.response) {
  68. reason.response.data = transformData.call(
  69. config,
  70. reason.response.data,
  71. reason.response.headers,
  72. reason.response.status,
  73. config.transformResponse
  74. );
  75. }
  76. }
  77. return Promise.reject(reason);
  78. });
  79. };