:::info
axios是一个用来处理异步请求的第三方库。可以在浏览器和Node环境中运行。
特点:
- 可以对每一个网络请求进行拦截,可以拦截请求和响应。
- 支持promise的API。
- 支持在node环境中使用。
- 可以中断、取消请求。
- 可以转换请求数据和响应数据。 :::
1、axios的简单配置以及二次封装
// axios的基本配置及使用1、请求配置选项2、响应结构信息3、全局默认配置axios.defaults.baseURL = "http://api.clould.com";axios.defaults.headers.common["Authorization"] = AUYH_TOKEN;axios.default.headers.post["Content-Type"] = "application/x-www-form-urlencoded"4、自定义实例默认配置const instance = axios.create.create({baseURL: "http://www.api.com/example.com"});优先是请求的config参数配置其次是实例的default默认配置最后是创建实例时的配置axios中有拦截器,分为请求拦截器和响应拦截器。// config.jsconst devBaseURL = "https://httpbin.org";const proBaseURL = "https://production.org";export const baseURL = process.env.NODE_ENV === "development" ? devBaseURL : proBaseURL;// request.js文件import { baseURL } from "./config.js";// 创建axios的实例const instance = axios.create({timeout: 6000, // 网络请求的超时时间baseURL: baseURL})// 请求拦截:axios.interceptors.request.use(config => {1 发送网络请求时,在页面中条件一个loading的组件作为动画。2 某些网络请求必须要求用户登录,可以在请求中判断是否携带了token。3 对某些请求参数进行序列化。return config;}, err => {return err;})// 响应的拦截axios.interceptors.response.use(response => {return response.data;}, err => {// 如果存在错误,并且可以对错误的类型进行简单的判断if (err && err.response) {switch(err.response.status) {case 400:err.message = "请求错误";break;case 401:err.message = "未授权访问";break;}}return error;})
2、前端token的验证思路
:::info 前后端完全分离的情况下,token的验证思路和步骤:
- 第一次登录,前端调用后端的登录接口,发送用户名和密码。
- 后端接收到用户发来的用户名和密码,验证成功 就给前端返回一个token。
- 前端拿到token,将数据存储到localStroage和vuex中,并且跳转路由页面。将数据保存到localStorage中,是为了防止在页面刷新的时候数据丢失,做本地存储。
- 前端每次跳转路由,就判断localStroage是否有token,没有的话,就跳转到登录界面,携带的有token值 就跳转到对应的界面。
- 每次调用后端接口都要在请求头中携带token。
- 后端判断请求头中有无token,有token就拿到token,并验证token是否过期。验证成功就返回相应的数据 验证失败(如token过期)就返回401,请求头中没有token也返回401。
- 如果前端拿到状态码为401,就清除token信息并跳转到登录界面。
备注:
上述需要搭配路由、以及状态管理进行使用。
:::
