首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >响应-获取-拦截修改所有标头

响应-获取-拦截修改所有标头
EN

Stack Overflow用户
提问于 2018-01-10 20:11:12
回答 3查看 10K关注 0票数 8

什么是正确的方式来拦截所有的请求和添加头部使用的反应与获取拦截?我有一个配置文件,其中包含对fetchIntercept.register()的调用。对于导入fetchIntercept配置文件的组件api调用,我有单独的文件。在调用api之后,我添加了取消寄存器()调用,但是没有添加报头。

api/config.js

代码语言:javascript
复制
import fetchIntercept from 'fetch-intercept';

const unregister = fetchIntercept.register({
    request: function (url, config) {
        // Modify the url or config here
        const withDefaults = Object.assign({}, config);
        withDefaults.headers = defaults.headers || new Headers({
          'AUTHORIZATION': `Bearer ${JSON.parse(sessionStorage.credentials).authToken}`
        });
        return [url, withDefaults];
    },

    requestError: function (error) {
        // Called when an error occured during another 'request' interceptor call
        return Promise.reject(error);
    },

    response: function (response) {
        // Modify the reponse object
        return response;
    },

    responseError: function (error) {
        // Handle an fetch error
        return Promise.reject(error);
    }
});

export default unregister;

api/packageApi.js

代码语言:javascript
复制
import unregister from '../api/config';

class PackageApi {

  static getAllPackages() {
    const request = new Request('/get/my/packages', {
      method: 'GET'
    });
    return fetch(request).then(response => {
      return response.json();
    }).catch(error => {
      return error;
    });
  }

}
unregister();

export default PackageApi;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-01-19 20:53:00

这是非常直接的使用axios而不是fetch。

票数 -3
EN

Stack Overflow用户

发布于 2021-11-25 12:40:49

我在单独的文件中添加了fetch-intercept的工作示例,它非常适合我。

https://stackblitz.com/edit/react-fetch-intercept-bi55pf?file=src/App.js

App.js

代码语言:javascript
复制
import React from 'react';
import './style.css';
import { AuthInterceptor } from './AuthInterceptor';

export default class App extends React.Component {
  componentDidMount() {
    AuthInterceptor();
    fetch('http://google.com', {
      headers: {
        'Content-type': 'application/json',
      },
    });
  }
  render() {
    return (
      <div>
        <h1>Hello StackBlitz!</h1>
        <p>Start editing to see some magic happen :)</p>
      </div>
    );
  }
}

AuthInterceptor.js

代码语言:javascript
复制
import fetchIntercept from 'fetch-intercept';

export const AuthInterceptor = () => {
  fetchIntercept.register({
    request: function (url, config) {
      // Modify the url or config here
      config.headers.name = 'Aravindh';
      console.log(config);
      return [url, config];
    },

    requestError: function (error) {
      // Called when an error occured during another 'request' interceptor call
      return Promise.reject(error);
    },

    response: function (response) {
      // Modify the reponse object
      return response;
    },

    responseError: function (error) {
      // Handle an fetch error
      return Promise.reject(error);
    },
  });
};

您可以在控制台中看到更新的标头值。

谢谢

票数 5
EN

Stack Overflow用户

发布于 2019-11-23 09:07:16

取消寄存器的使用似乎不正确。在打电话之前你已经没有注册了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48195324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档