axios config里增加自定义属性,拦截器拦截config时,没有找到自定义属性

发布于 2022-09-12 00:38:39 字数 284 浏览 9 评论 0

axios.post(url, data, Object.assign({ baseURL: axios.defaults.baseURL, json: false}))
axios.interceptors.request.use((config) => {
  console.log(899999, config)
  return config;
});

如上,我在config里增加里json属性,但是在拦截器里并没有打印出json属性值

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

掀纱窥君容 2022-09-19 00:38:40

这个问题刚好有碰到过,在最新版本的 axios 对这部分逻辑做了处理,它对 config 可以持有的键做了白名单处理,可以查看这里

所以可以用上一个版本,也可以手动修改这部分逻辑,白名单里加一个 extra 的字段用于外挂你需要的其他键。

/**
     * Config-specific merge-function which creates a new config-object
     * by merging two configuration objects together.
     *
     * @param {Object} config1
     * @param {Object} config2
     * @returns {Object} New object resulting from merging config2 to config1
     */
    module.exports = function mergeConfig(config1, config2) {
      // eslint-disable-next-line no-param-reassign
      config2 = config2 || {};
      var config = {};
    
      utils.forEach(['url', 'method', 'params', 'data'], function valueFromConfig2(prop) {
        if (typeof config2[prop] !== 'undefined') {
          config[prop] = config2[prop];
        }
      });
    
      utils.forEach(['headers', 'auth', 'proxy'], function mergeDeepProperties(prop) {
        if (utils.isObject(config2[prop])) {
          config[prop] = utils.deepMerge(config1[prop], config2[prop]);
        } else if (typeof config2[prop] !== 'undefined') {
          config[prop] = config2[prop];
        } else if (utils.isObject(config1[prop])) {
          config[prop] = utils.deepMerge(config1[prop]);
        } else if (typeof config1[prop] !== 'undefined') {
          config[prop] = config1[prop];
        }
      });
    
      utils.forEach([
        'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer',
        'timeout', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',
        'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'maxContentLength',
        'validateStatus', 'maxRedirects', 'httpAgent', 'httpsAgent', 'cancelToken',
        'socketPath'
      ], function defaultToConfig2(prop) {
        if (typeof config2[prop] !== 'undefined') {
          config[prop] = config2[prop];
        } else if (typeof config1[prop] !== 'undefined') {
          config[prop] = config1[prop];
        }
      });
    
      return config;
    };
夏末的微笑 2022-09-19 00:38:40

修改源码和降版本可以完成,还有个求其次的方案就是在headers里配置自定义属性,如defineProp,通过response.config.headers[defineProp]获取

当然在axios版本0.19.x中也对自定义属性进行了支持!
Fixing custom config options

爱的故事 2022-09-19 00:38:40

麻烦问下看了v0.21.0源码,最后一段代码不是带上了自定义参数吗

var otherKeys = Object
    .keys(config1)
    .concat(Object.keys(config2))
    .filter(function filterAxiosKeys(key) {
      return axiosKeys.indexOf(key) === -1;
    });
utils.forEach(otherKeys, mergeDeepProperties);

断点看的时候也有自定义参数,打包上生成环境没有

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文