关于前端:axios源码四

4次阅读

共计 2144 个字符,预计需要花费 6 分钟才能阅读完成。

今日来看 defaults.js 文件, 也就是咱们的默认配置. 既然是配置, 那就是说它是个对象 {},
所以这个文件的格局就是 var defaults = {}, 而后 exports.default = defaults

文件中有两个函数, 第一个是设置申请头的 ”Content-Type”, 另一个是抉择适配器的:

function setContentTypeIfUnset(headers, value) {if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {headers['Content-Type'] = value;
  }
}

function getDefaultAdapter() {
  var adapter;
  if (typeof XMLHttpRequest !== 'undefined') {
    // 浏览器应用 XHR adapter
    adapter = require('./adapters/xhr'); // xhrAdapter  返回一个 promise
  } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {
    // node HTTP adapter
    adapter = require('./adapters/http'); // httpAdapter  返回一个 promise
  }
  return adapter;
}

而后就是 default 是的属性了:

  adapter: getDefaultAdapter(), // 适配器, 就是发送申请的办法

  transformRequest: [function transformRequest(data, headers) {normalizeHeaderName(headers, 'Accept'); // 设置 header['accept']的值
    normalizeHeaderName(headers, 'Content-Type');  // 设置 header['Content-Type']的值
    if (utils.isFormData(data) ||
      utils.isArrayBuffer(data) ||
      utils.isBuffer(data) ||
      utils.isStream(data) ||
      utils.isFile(data) ||
      utils.isBlob(data)
    ) {return data;}
    if (utils.isArrayBufferView(data)) {return data.buffer;}
    if (utils.isURLSearchParams(data)) {// 设置 header['Content-Type']的值
      setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');
      return data.toString();}
    if (utils.isObject(data)) {// 设置 header['Content-Type']的值
      setContentTypeIfUnset(headers, 'application/json;charset=utf-8');
      return JSON.stringify(data);
    }
    return data;
  }],

  transformResponse: [function transformResponse(data) {
    /*eslint no-param-reassign:0*/
    if (typeof data === 'string') {
      try {data = JSON.parse(data);
      } catch (e) {/* Ignore */}
    }
    return data;
  }],

  /**
   * 一个毫秒级的定时来终止一个申请, 如果设为 0 则没有作用
   * timeout is not created.
   */
  timeout: 0,

  xsrfCookieName: 'XSRF-TOKEN',
  xsrfHeaderName: 'X-XSRF-TOKEN',

  maxContentLength: -1,
  maxBodyLength: -1,

  validateStatus: function validateStatus(status) {return status >= 200 && status < 300;}

而后增加了一些其余属性:

defaults.headers = {
  common: {'Accept': 'application/json, text/plain, */*'}
};

utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {defaults.headers[method] = {};});

utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);
});
正文完
 0