Javascript axios:如何合并transformRequest axios.defaults.transformRequest=[ (数据、标题)=>{ console.log('默认配置') //…一些代码 返回qs.stringify(数据) } ] 函数postData(值){ axios.post('/xxx',值{ transformRequest:[数据=>{ console.log('postdataconfig') 常量{aProp,…rest}=数据 if(isX(aProp)){ 返回{…rest,x:aProp} } 返回{…rest,y:aProp} }] }) }
预期产出:Javascript axios:如何合并transformRequest axios.defaults.transformRequest=[ (数据、标题)=>{ console.log('默认配置') //…一些代码 返回qs.stringify(数据) } ] 函数postData(值){ axios.post('/xxx',值{ transformRequest:[数据=>{ console.log('postdataconfig') 常量{aProp,…rest}=数据 if(isX(aProp)){ 返回{…rest,x:aProp} } 返回{…rest,y:aProp} }] }) },javascript,axios,Javascript,Axios,预期产出: postData config default config 但仅输出postdataconfig transformRequest似乎是通过索引合并的,而不是使用concat。那么,如何调用这两个函数呢?这似乎不像您编写的那样,因为Axios只是通过请求特定的配置来覆盖全局配置的transformRequest属性 请查看mergeConfig.js 在下面的代码片段中 config2是特定于请求的配置 config1是全局配置 var valueFromConfig2Key
postData config
default config
但仅输出postdataconfig
transformRequest
似乎是通过索引合并的,而不是使用concat
。那么,如何调用这两个函数呢?这似乎不像您编写的那样,因为Axios只是通过请求特定的配置来覆盖全局配置的transformRequest
属性
请查看mergeConfig.js
在下面的代码片段中
config2
是特定于请求的配置
config1
是全局配置
var valueFromConfig2Keys = ['url', 'method', 'data'];
var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy', 'params'];
var defaultToConfig2Keys = [
'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer',
'timeout', 'timeoutMessage', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',
'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'decompress',
'maxContentLength', 'maxBodyLength', 'maxRedirects', 'transport', 'httpAgent',
'httpsAgent', 'cancelToken', 'socketPath', 'responseEncoding'
];
var directMergeKeys = ['validateStatus'];
只有mergedeepproperties键
像这里一样进行深度合并
function mergeDeepProperties(prop) {
if (!utils.isUndefined(config2[prop])) {
config[prop] = getMergedValue(config1[prop], config2[prop]);
} else if (!utils.isUndefined(config1[prop])) {
config[prop] = getMergedValue(undefined, config1[prop]);
}
}
utils.forEach(mergeDeepPropertiesKeys, mergeDeepProperties);
defaultToConfig2Keys
仅由请求特定的配置覆盖,如下所示,transformRequest
是这些属性之一
utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) {
if (!utils.isUndefined(config2[prop])) {
config[prop] = getMergedValue(undefined, config2[prop]);
} else if (!utils.isUndefined(config1[prop])) {
config[prop] = getMergedValue(undefined, config1[prop]);
}
});
PS:我建议您在axios上编写自己的包装,或者您可以在提出请求之前提前准备数据。