我已经看过axios文档,但它说的只是
// Add a request interceptor
axios.interceptors.request.use(function (config) {
// Do something before request is sent
return config;
}, function (error) {
// Do something with request error
return Promise.reject(error);
});
// Add a response interceptor
axios.interceptors.response.use(function (response) {
// Do something with response data
return response;
}, function (error) {
// Do something with response error
return Promise.reject(error);
});还有很多教程只展示了这段代码,但我很困惑它是用来做什么的,能不能有人给我举个简单的例子来效仿。
发布于 2018-10-10 09:48:04
简单地说,它更像是每个HTTP操作的检查点。已经发出的每个API调用都通过这个拦截器传递。
那么,为什么有两个拦截器?
API调用由两个部分组成,一个请求和一个响应。由于它的行为类似于检查点,所以请求和响应有单独的拦截器。
一些请求拦截器用例-
假设在发出请求之前要检查凭据是否有效。因此,您可以在拦截器级别检查您的凭据是否有效,而不是实际进行API调用。
假设您需要向每个发出的请求附加一个令牌,而不是在每个Axios调用中重复令牌加法逻辑,您可以创建一个拦截器,该拦截器将一个令牌附加到每个发出的请求上。
一些响应拦截器用例-
假设您得到了一个响应,并根据您想要推断用户已登录的API响应来判断。因此,在响应拦截器中,您可以初始化处理登录状态的用户的类,并相应地对收到的响应对象进行更新。
假设您已经请求了一些具有有效API凭据的API,但是您没有访问数据的有效角色。因此,您可以从响应拦截器触发一个警告,表示不允许用户使用。这样,您将从未经授权的API错误处理中保存,您必须对每个Axios请求执行这些错误处理。
下面是一些代码示例
请求拦截器
config.headers对象中使用。例如:
axios.interceptors.request.use((config) => { config.headers.genericKey = "someGenericValue";返回配置;},(错误) => {返回Promise.reject(错误);});GET请求,所发送的查询参数可以在config.params对象中找到。响应拦截器
api-request中传递一个额外的参数,并在响应拦截器中使用相同的参数来执行您的操作。例如:
//假设我们传递一个额外的参数"parse: true“axios.get("/city-list",{ parse: true });
一旦在响应拦截器中,我们可以使用它如下:
Axios.interceptors.response.use((响应) => { if (response.config.parse) {//在这里执行操作并更改响应对象}返回响应;},(错误) => {返回Promise.reject(error.message);});
因此,在本例中,每当parse对象在response.config中存在时,操作就会完成,在其余的情况下,它将按原样工作。HTTP代码,然后作出决定。例如:
Axios.interceptors.response.use(响应) => { if(response.status === 401) {告警(“未授权”);}返回响应;},(错误) => { if (error.response & error.response.data) {返回Promise.reject(error.response.data);}返回Promise.reject(error.message);};发布于 2020-09-04 13:03:17
例如,如果希望捕捉从发送请求到收到响应的时间,可以使用以下代码:
const axios = require("axios");
(async () => {
axios.interceptors.request.use(
function (req) {
req.time = { startTime: new Date() };
return req;
},
(err) => {
return Promise.reject(err);
}
);
axios.interceptors.response.use(
function (res) {
res.config.time.endTime = new Date();
res.duration =
res.config.time.endTime - res.config.time.startTime;
return res;
},
(err) => {
return Promise.reject(err);
}
);
axios
.get("http://localhost:3000")
.then((res) => {
console.log(res.duration)
})
.catch((err) => {
console.log(err);
});
})();发布于 2018-10-10 09:42:07
它就像一个中间件,基本上它被添加到任何请求(无论是GET、POST、PUT、DELETE)或任何响应(从服务器获得的响应)。它经常用于涉及授权的情况。
看看这个:Axios拦截器和异步登录
下面是关于此的另一篇文章,并给出了一个不同的示例:https://medium.com/@danielalvidrez/handling-error-responses-with-grace-b6fd3c5886f0
因此,其中一个示例的要点是,您可以使用拦截器检测授权令牌是否过期(例如,如果您获得403 ),并重定向页面。
https://stackoverflow.com/questions/52737078
复制相似问题