什么是Axios?
Axios是用于浏览器和node.js的基于Promise的HTTP客户端。它具有许多有用的默认值,例如自动检测JSON响应并返回一个对象而不是纯文本,如果响应状态代码大于400,则会引发错误。
什么是axios拦截器?
Axios 拦截器 是库每次发送或接收请求时都会调用的函数。您可以先拦截请求或响应,然后再通过“然后”或“捕获”处理它们。
例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| axios.interceptors.request.use(function (config) { return config; }, function (error) { return Promise.reject(error); } );
axios.interceptors.response.use(function (response) { return response; }, function (error) { return Promise.reject(error); } );
|
删除拦截器。
1 2
| const interceptor = axios.interceptors.request.use(function (config) {}); axios.interceptors.request.eject(interceptor);
|
使用拦截器在每个请求中注入身份验证令牌头。
在构建应用程序时,您很有可能会使用需要某些凭据(例如api_token或用户Auth令牌)的API。通常,您将必须在每个HTTP请求后附加所需的标头。使用Axios拦截器,您可以设置一次,在任何调用Axios实例的地方,都可以确保令牌存在。
1 2 3 4 5 6 7 8
| axios.interceptors.request.use(req => { req.headers.authorization = 'Bearer mytoken'; return req; });
const res = await axios.get('https://api.example.com');
|
使用拦截器记录每个请求和响应。
记录请求可能是有益的,特别是当您拥有大型应用程序并且不知道所有请求在何处触发时。使用Axios拦截器,您可以快速记录每个请求和响应。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| const axios = require('axios');
axios.interceptors.request.use(req => { console.log(`${JSON.stringify(req, null, 2)}`); return req; });
axios.interceptors.response.use(res => { console.log(res.data.json); return res; });
await axios.post('https://example.com');
|
使用Axios拦截器进行错误处理。
您可以使用Axios拦截器来捕获所有错误,并在到达最终用户之前对其进行增强。如果您使用具有不同错误对象形状的多个API,则可以使用拦截器将它们转换为标准结构。
1 2 3 4 5 6 7 8 9 10 11
| const axios = require('axios'); axios.interceptors.response.use( res => res, err => { throw new Error(err.response.data.message); } ) const err = await axios.get('http://example.com/notfound'). catch(err => err);
err.message;
|
使用拦截器为请求添加速率限制。
后端资源有限,可能耗费大量性能。作为客户端,您可以通过限制HTTP调用的速率来帮助减轻服务器的负载。使用Axios拦截器的方法如下。
1 2 3 4 5 6 7 8 9 10 11 12
| const axios = require(‘axios’); const debounce = require('lodash.debounce'); axios.interceptors.request.use( res => { return new Promise((resolve) => {
debounce( () => resolve(config),2000); }); }); } )
|