结论
要用 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