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上编写自己的包装,或者您可以在提出请求之前提前准备数据。