使用react-fetch-intercept拦截所有请求并添加标头的正确方法是什么?我有一个配置文件,其中包含对fetchIntercept.register()的调用。我为导入fetchIntercept配置文件的组件api调用提供了单独的文件。我在调用api之后添加了unregister()调用,但未添加标头。
api / config.js
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;
Run Code Online (Sandbox Code Playgroud)
api / packageApi.js
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;
Run Code Online (Sandbox Code Playgroud)
我在单独的文件中添加了工作示例fetch-intercept,它非常适合我。
https://stackblitz.com/edit/react-fetch-intercept-bi55pf?file=src/App.js
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>
);
}
}
Run Code Online (Sandbox Code Playgroud)
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);
},
});
};
Run Code Online (Sandbox Code Playgroud)
您可以在控制台中看到更新后的标头值。
谢谢
| 归档时间: |
|
| 查看次数: |
1663 次 |
| 最近记录: |