封装axios

1.什么是axios

    Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。

    特点:

  • 从浏览器中创建 XMLHttpRequests
  • 从 node.js 创建 http 请求
  • 支持 Promise API
  • 拦截请求和响应
  • 转换请求数据和响应数据
  • 取消请求
  • 自动转换 JSON 数据
  • 客户端支持防御 XSRF

在项目过程中,会频繁的使用调取接口,为了避免重复代码,快速编写接口,对axios进行封装

进行封装axios-1

//引入axios,qs
import axios from 'axios'
import qs from 'qs'

//设置axios的默认地址
axios.defaults.baseURL = 'http://127.0.0.1:8888'


//进行拦截
axios.interceptors.request.use(function (config) {
   const token =  localStorage.getItem('token')
    // 在发送请求之前做些什么,例如加入token , 添加请求头    
    //除了登录界面,全部带上请求头
    config.headers.Authorization = `Bearer ${token}`   
    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});

axios.interceptors.response.use(function (response) {
    // 在接收响应做些什么,例如跳转到登录页
    let { code, msg } = response.data;
    //当有code的时候进行消息提示
    if (code != undefined) {
        if (code === 1) {
            //弹出提示,删除成功
            Message({
                message: msg,
                type: "success"
            });
        }
        if (code === 0) {
            Message.error(msg)
        }
    }
    return response;
}, function (error) {
    // 对响应错误做点什么
    return Promise.reject(error);
});


//进行封装axios并暴露
export default {
    get(url, params) {
        return new Promise((resolve, reject) => {
            axios.get(url, { params })
                .then(res => resolve(res.data))
                .catch(err => reject(err))
        })
    },
    post(url, params) {
        return new Promise((resolve, reject) => {
            axios.post(url, qs.stringify(params))
                .then(res => resolve(res.data))
                .catch(err => reject(err))
        })
    },
}

进行封装axios-2

import axios from 'axios'
import qs from 'qs'

//默认地址
axios.defaults.baseURL = 'http://127.0.0.1:3333'

//请求拦截器
axios.interceptors.request.use((req)=>{
    const token = '13';
    if(token){
        //token为后端定义字段
        axios.defaults.token = token
    }

    // 处理post
    if(req.method == 'post'){
        //后端如果是加上了cotent-type字段,则不需要处理
        req.data = qs.stringify(req.data)
    }
    
   //返给后台
    return req
},(err)=>Promise.reject(error));


//响应拦截器
axios.interceptors.response.use((res)=>{
    //对返回状态进行处理
    switch (res.status) {
        case 400:
            break;
        case 500:
            break;
        default:
            break;
    }     
    //返回前端
    return res.data.data
},(err)=>Promise.reject(error));

 

进行接口封装

import request from '@/utils/request.js' //引入封装的axios

//暴露接口

//登录接口
export const loginAccount = params => request.get('/login',params);

 

发布了55 篇原创文章 · 获赞 12 · 访问量 4252
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章