vue2.0封装axios公共请求方法(promise)

在vue项目src文件夹目录下新建文件夹api,然后在此文件夹下新建axiosConfig.js:

import axios from 'axios'
import qs from 'qs'
import { Toast } from 'vant';
import router from '../router/index'

// 默认配置
axios.defaults.withCredentials = false
// axios.defaults.timeout = 50000
axios.defaults.headers = { 'X-Requested-With': 'XMLHttpRequest' }
axios.defaults.baseURL = process.env.API_ROOT


// 请求拦截器
axios.interceptors.request.use(
    config => {
        if (config.method === 'get') {
        }
        return config
    },
    err => {
        Toast.fail('请求错误')
        return Promise.reject(err)
    }
)
// 响应拦截器
axios.interceptors.response.use(
    response => {
        // 请求成功的时候更新token
        const token = response.headers["authorization"];  // 需要服务器设置 'Access-Control-Expose-Headers' : 'Authorization',
        if (token) {
            localStorage.setItem('token', token);
        }

        return response
    },
    error => {
        if (error.response && error.response.status === 401) {
            router.push({
                path: '/login',
                query: {
                    url: encodeURIComponent(location.hash.substr(1))
                }
            })
        } else {
            Toast({
                message: '请重新进入!' + error,
                position: 'top',
                duration: 2000
            })
            console.log(error.response)
        }
        
        return Promise.reject(error)
    }
)
// 错误处理
function checkStatus(response) {
    return new Promise((resolve, reject) => {
        if (response.status === 200) {
            resolve(response.data)
        } else {
            reject(response.data)
        }
    })
}

export default {
    get(url, params) {
        return axios({
            method: 'get',
            url,
            params,
            headers: {
                'X-Requested-With': 'XMLHttpRequest',
                'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
                'Authorization': `${localStorage.getItem('token')}`
            }
        }).then(checkStatus)
    },
    post(url, data) {
        return axios({
            method: 'post',
            url,
            data: qs.stringify(data),
            headers: {
                'X-Requested-With': 'XMLHttpRequest',
                'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
                'Authorization': `${localStorage.getItem('token')}`
            }
        }).then(checkStatus)
    },
    put(url, data) {
        return axios({
            method: 'put',
            url,
            data: qs.stringify(data)
        }).then(checkStatus)
    },
    putParams(url, params) {
        return axios({
            method: 'put',
            url,
            params
        }).then(checkStatus)
    },
    putForm(url, data) {
        return axios({
            method: 'put',
            url,
            data: qs.stringify(data),
            headers: {
                'X-Requested-With': 'XMLHttpRequest',
                'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
            }
        })
    },
    delete(url, params) {
        return axios({
            method: 'delete',
            url,
            params
        }).then(checkStatus)
    }

}

注意:我项目里用的是有赞的Vant-ui,根据自己的项目需求对此文件进行增删改,完了之后在main.js引入,然后将这几种请求方式挂在在全局下,就可以在页面中进行请求了。

做人,最重要的是开心嘛,der
在这里插入图片描述

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue2封装Axios接口请求的二次封装可以让我们在项目中更加方便地使用Axios进行数据请求,同时也可以提高代码的可维护性和复用性。下面是一个简单的Vue2封装Axios接口请求的示例: 1. 安装Axios 在项目中安装Axios,可以使用npm或者yarn进行安装: ```bash npm install axios --save ``` 或者 ```bash yarn add axios ``` 2. 封装Axios 在src目录下新建一个api文件夹,用于存放Axios封装代码。在api目录下新建一个request.js文件,用于封装Axios请求方法。 ```javascript import axios from 'axios' // 创建实例 const service = axios.create({ baseURL: process.env.BASE_URL, // 接口的基础路径 timeout: 5000 // 请求超时时间 }) // 请求拦截器 service.interceptors.request.use( config => { // 在请求发送之前做一些处理,比如添加token等 return config }, error => { // 请求错误时做些事 return Promise.reject(error) } ) // 响应拦截器 service.interceptors.response.use( response => { // 对响应数据做一些处理,比如说判断返回的状态码是否正确等 return response.data }, error => { // 响应错误时做些事 return Promise.reject(error) } ) export default service ``` 在上面的代码中,我们使用了Axios的interceptors来拦截请求和响应,并做一些处理。比如说,在请求拦截器中,我们可以在发送请求之前添加token等信息;在响应拦截器中,我们可以对返回的数据进行处理,判断响应状态码是否正确等。 3. 封装API请求 在api目录下新建一个index.js文件,用于封装API请求方法。我们可以根据实际的业务需求,封装不同的请求方法。 ```javascript import request from './request' export function getUsers () { return request({ url: '/users', method: 'get' }) } export function getUserById (id) { return request({ url: `/users/${id}`, method: 'get' }) } export function createUser (data) { return request({ url: '/users', method: 'post', data }) } // 其他API请求方法... ``` 在上面的代码中,我们使用了封装的request方法来发送请求,同时根据业务需求,定义了不同的请求方法,比如获取用户列表、根据ID获取用户信息、创建用户等。 4. 使用API请求Vue组件中使用API请求非常简单,只需要在组件中引入封装的API请求,然后调用对应的方法即可。 ```javascript import { getUsers } from '@/api' export default { mounted () { this.getUsers() }, methods: { async getUsers () { const { data } = await getUsers() console.log(data) } } } ``` 在上面的代码中,我们在组件中引入了封装的getUsers方法,并在mounted钩子函数中调用该方法来获取用户列表,并将返回的数据打印到控制台上。 这样,我们就完成了Vue2封装Axios接口请求的二次封装。通过对Axios进行二次封装,我们可以更加方便地使用Axios进行数据请求,并且也可以提高代码的可维护性和复用性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值