Vue使用axios封装请求

随着越来越多的公司和团队以及开发者再使用vue来进行前端开发,无论如何发展http请求还是必不可少的,以前jquery时代我们使用ajax现在依然也可以使用,只是这样的话是不是显得有些不伦不类或者说不是最优的方案;虽有说出现很多的HTTP请求的插件,Axios就是其中最为优秀的代表。今天我们讨论下vue中的axios的使用,先了解以下axios
axios的官网这样解释axios:Promise based HTTP client for the browser and node.js;翻译为:Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。

特性

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

浏览器支持

image.png

安装
使用 npm:

npm install axios

使用 bower:

bower install axios

使用 cdn:

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

如何封详情请参见如下代码

axios.defaults.timeout = 5000;
// axios.defaults.baseURL = process.env.VUE_APP_serverUrl;
// 跨域请求,允许保存cookie
axios.defaults.withCredentials = true;
import axios from 'axios'
import { serialize } from './util'
import { Notification, Message } from 'element-ui'
export default function request(params) {
    const nextParams = { ...params, headers: { ...params.headers } }
    return axios({ ...nextParams })
        .then(checkStatus)
        .then(checkCode)
        .catch(err => {
            // TODO: 报错
            handleError(err)
        })
}
//对返回的data中的code处理
function checkCode(data) {
    if (data.code === 403) {
        store.dispatch('user/FedLogOut').then(() => {
            router.push({ path: '/login' })
        })
        return
    }
}
//处理请求中抛出的错误
function handleError(error) {
    if (error.message.includes('4xx')) {
        Message({
            message: '用户名不存在或者密码错误',
            type: 'error'
        })
    } else if (error.message.includes('4xx')) {
        router.push({ path: '/xxx' })
        Message({
            message: '登陆失效,请重新登陆',
            type: 'error'
        })
    } else {
        Notification.error({
            title: '请求错误',
            message: `xxxxxxxxxxxxx`
        })
    }
}
// HTTPrequest拦截
axios.interceptors.request.use(config => {
    const isToken = (config.headers || {}).isToken === false
    let token = store.getters.access_token ? store.getters.access_token : window.localStorage.getItem('access_token') ? window.localStorage.getItem('access_token') : ''
    if (token && !isToken) {
        config.headers['Authorization'] = 'Bearer ' + token// token
    }
    // headers中配置serialize为true开启序列化
    if (config.methods === 'post' && config.headers.serialize) {
        config.data = serialize(config.data)
        delete config.data.serialize
    }
    return config
}, error => {
    return Promise.reject(error)
})
// HTTPresponse拦截
axios.interceptors.response.use(res => {
  const status = Number(res.status) || 200
    const message = res.data.msg
    if (res.data.code === XXXXX) {
        Message({
            message: `服务器内部错误,请重试或者联系管理员`,
            type: 'error'
        })
    }
    if (res.data.code && res.data.code !== 0 && res.data.code !== 1) {
        Message({
            message: res.data.msg,
            type: 'error'
        })
    }
    if (status !== 200) {
        return Promise.reject(new Error(message))
    }
    return res
}, err)

使用封装后的axios

import request from '@/util/axios'

export function getMenuTree() {
    return request({
        url: `/xxx/xxx/xx`,
        method: 'POST'
    })
}

以上仅供参考,谢谢支持

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雪山上的小灰熊

谢谢支持哦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值