结论

要用 axios.create 来创建实例,我之前没看文档,直接想当然的用 new axios.Axios,结果后端返回 application/json 的内容,而我只能接收到字符串

因为 axios.create 会有一些默认配置项,其中就包括了对 JSON 的处理,所以说我们平时直接用 axios.get 的时候不用手动处理 JSON 格式的数据。

源码探究

本文写于 22/10/19,当读者看到时源码可能已发生变化,不过思想还是一样的。

lib/axios.js 的 25-44 行如下:

function createInstance(defaultConfig) {
  const context = new Axios(defaultConfig);
  const instance = bind(Axios.prototype.request, context);

  // Copy axios.prototype to instance
  utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});

  // Copy context to instance
  utils.extend(instance, context, null, {allOwnKeys: true});

  // Factory for creating new instances
  instance.create = function create(instanceConfig) {
    return createInstance(mergeConfig(defaultConfig, instanceConfig));
  };

  return instance;
}

// Create the default instance to be exported
const axios = createInstance(defaults);

那么这里的 defaults 来源于 lib/defaults/index.js,其中有很多地方是用到了 JSON.parse,我这里就不深究了,读者有兴趣可以自己去看一看。

博客同步声明

按照要求,在本文末加上一段声明。为了让更多的人能看到我的文章,也是由于收到邀请:

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=3bur8utssk84c