# Axios 封装及接口管理 `utils/request.js` 封装 axios ,开发者需要根据后台接口做修改。 - `service.interceptors.request.use` 里可以设置请求头,比如设置 `token` - `config.hideloading` 是在 api 文件夹下的接口参数里设置,下文会讲 - `service.interceptors.response.use` 里可以对接口返回数据处理,比如 401 删除本地信息,重新登录 ```javascript import axios from "axios"; import store from "@/store"; import { Toast } from "vant"; // 根据环境不同引入不同api地址 import { baseApi } from "@/config"; // create an axios instance const service = axios.create({ baseURL: baseApi, // url = base api url + request url withCredentials: true, // send cookies when cross-domain requests timeout: 5000, // request timeout }); // request 拦截器 request interceptor service.interceptors.request.use( (config) => { // 不传递默认开启loading if (!config.hideloading) { // loading Toast.loading({ forbidClick: true, }); } if (store.getters.token) { config.headers["X-Token"] = ""; } return config; }, (error) => { // do something with request error console.log(error); // for debug return Promise.reject(error); } ); // respone拦截器 service.interceptors.response.use( (response) => { Toast.clear(); const res = response.data; if (res.status && res.status !== 200) { // 登录超时,重新登录 if (res.status === 401) { store.dispatch("FedLogOut").then(() => { location.reload(); }); } return Promise.reject(res || "error"); } else { return Promise.resolve(res); } }, (error) => { Toast.clear(); console.log("err" + error); // for debug return Promise.reject(error); } ); export default service; ``` #### 接口管理 在`src/api` 文件夹下统一管理接口 - 你可以建立多个模块对接接口, 比如 `home.js` 里是首页的接口这里讲解 `user.js` - `url` 接口地址,请求的时候会拼接上 `config` 下的 `baseApi` - `method` 请求方法 - `data` 请求参数 `qs.stringify(params)` 是对数据系列化操作 - `hideloading` 默认 `false`,设置为 `true` 后,不显示 loading ui 交互中有些接口不需要让用户感知 ```javascript import qs from "qs"; // axios import request from "@/utils/request"; //user api // 用户信息 export function getUserInfo(params) { return request({ url: "/user/userinfo", method: "post", data: qs.stringify(params), hideloading: true, // 隐藏 loading 组件 }); } ``` #### 如何调用 ```javascript // 请求接口 import { getUserInfo } from "@/api/user.js"; const params = { user: "sunnie" }; getUserInfo(params) .then(() => {}) .catch(() => {}); ```