一般情况下发送请求,后端都会传过来json数据,其中为公共返回类的样式返回内容,分为code状态码、message消息信息、data返回数据。
假如每一次发送请求都去处理返回信息 太麻烦,我们创建一个拦截器对返回信息进行统一操作。
其中的数据不做处理返回给前端做处理。
1.首先我们创建utils目录下的api.js

2.引入axios工具 和element-ui的返回消息组件

3.拦截器的编写
- axios.interceptors.response.use(success=>{
- //业务逻辑错误 success不是后端接口返回的数据串 而是浏览器的
- //说明掉到接口了 http标准状态码200 但是逻辑是否200不确定
- if(success.status&&success.status===200){
- //掉到接口了但是逻辑不对 响应给页面后台传过来的message
- if(success.data.code!==200){
- Message.error({message:success.data.message})
- return;
- }
- //成功后返回给客户端成功的消息(后端的)
- if (success.data.message){
- Message.success({message:success.data.message})
- }
- //拦截器拦截到的请求都是成功的就将数据继续传递下去
- //事实上拦截器就帮助前端处理了后端传来的message
- return success.data;
- }
- },error => {
- //可能服务器崩了error不是后端接口返回的数据串 而error.response.data是浏览器的
- if(error.response.code!==200){
- Message.error({message:"接口被吃了"+error.response.data.message})
- router.replace("/").then(r => console.log(r))
- }
- });
success.data
success.status 此为浏览器标准状态码
Error
error.code不存在
error.status是错误的标准浏览器状态码
error.response如下

error.response.data是返回的公共类
每一次去调用axios的异步请求都需要书写相同的格式,我们将四种请求封装好,进行全局配置,
只需当插件调用 避免重复代码。
1.同样是在api.js中

2.编写代码如下。
- //万一添加前置路径 可变更
- let base = '';
- //封装请求
- export const postRequest=(url,parmes)=>{
- return axios({
- method:"post",
- url:`${base}${url}`,
- data: parmes
- })
- }
-
- // 传送json的put请求
- export const putRequest = (url, params) => {
- return axios({
- method: 'put',
- url: `${base}${url}`,
- data: params
- })
- }
- // 传送json的get请求
- export const getRequest = (url, params) => {
- return axios({
- method: 'get',
- url: `${base}${url}`,
- data: params
- })
- }
- // 传送json的delete请求
- export const deleteRequest = (url, params) => {
- return axios({
- method: 'delete',
- url: `${base}${url}`,
- data: params
- })
- }
3.全局处理
将组件导入到main.js中

代码如下
- import { postRequest, putRequest, getRequest, deleteRequest } from './utils/api'
-
- // 插件形式使用请求
- Vue.prototype.postRequest = postRequest
- Vue.prototype.putRequest = putRequest
- Vue.prototype.getRequest = getRequest
- Vue.prototype.deleteRequest = deleteRequest
4.调用举例

- const {defineConfig} = require('@vue/cli-service')
- module.exports = defineConfig({
- transpileDependencies: true,
- devServer: {
- proxy: {
- "/api": {
- target: 'http://www.lijiaqi.icu:8081', // 对应的代理地址
- //重写路径 替换规则
- pathRewrite: {
- '/api': ''
- }
- }
- }
- }
- })