Uview封装请求方法

简介: 最近开发了一个UniApp程序,但是在遇到请求方法调用的时候,还是犹豫了,因为之前没有搞过这种,然后自己查了很多资料,发现市面的都不是很一样,经过自己的研究,自己根据官方文档总结了一些通过方法,供大家参考。
最近开发了一个UniApp程序,但是在遇到请求方法调用的时候,还是犹豫了,因为之前没有搞过这种,然后自己查了很多资料,发现市面的都不是很一样,经过自己的研究,自己根据官方文档总结了一些通过方法,供大家参考。

1.请求、响应拦截器

新建一个request.js文件用来书写请求、响应拦截器,这样的话就可以根据不同的需求做相应的处理,这么统一处理会方便很多。

// 此vm参数为页面的实例,可以通过它引用vuex中的变量
module.exports = (vm) => {
    // 初始化请求配置
    uni.$u.http.setConfig((config) => {
        /* config 为默认全局配置*/
        config.baseURL = 'http://127.0.0.1:1111';
        // config.sslVerify = false;
        return config
    })

    // 请求拦截
    uni.$u.http.interceptors.request.use((config) => { // 可使用async await 做异步操作
        // 初始化请求拦截器时,会执行此方法,此时data为undefined,赋予默认{}
        config.data = config.data || {}
        // 根据custom参数中配置的是否需要token,添加对应的请求头
        if (config?.custom?.auth) {
            // 可以在此通过vm引用vuex中的变量,具体值在vm.$store.state中
            config.header.token = uni.getStorageSync('token')
        }
        return config
    }, config => { // 可使用async await 做异步操作
        return Promise.reject(config)
    })

    // 响应拦截
    uni.$u.http.interceptors.response.use((response) => {
        console.log(response.data)
        /* 对响应成功做点什么 可使用async await 做异步操作*/
        const res = response.data
        // 自定义参数
        const custom = response.config?.custom
        if (res.code === 999 || res.code === 9999) {
            // 如果没有显式定义custom的toast参数为false的话,默认对报错进行toast弹出提示
            if (custom.toast !== false) {
                uni.$u.toast(res.msg)
            }

            // 如果需要catch返回,则进行reject
            if (custom?.catch) {
                return Promise.reject(res)
            } else {
                // 否则返回一个pending中的promise,请求不会进入catch中
                return new Promise(() => {})
            }
        }
        if (res.code === 400) {
            uni.$u.toast(res.msg)
            return Promise.reject(res)
        }
        if (res.code === 401) {
            uni.$u.route('/pages/login/login');
            return Promise.reject(res)
        }
        if (res.code === 403) {
            uni.$u.route({
                url: '/pages/result/nopermission/nopermission',
                params: {
                    text: res.data
                }
            });
            return Promise.reject(res)
        }
        return res.data === undefined ? {} : res.data
    }, (response) => {
        // 对响应错误做点什么 (statusCode !== 200)
        uni.$u.toast('网络波动,请稍后再试')
        return Promise.reject(response)
    })
}

2.封装请求方法

新建一个api.js,我们可以在这里把所有的请求方法都放在这里,这样方法地址或者参数变化的时候,直接在这里修改就可以了,利于维护。

const http = uni.$u.http

// 显示首页顶部banner图
export const getTopBanner = (data) => http.get('/banner/list/topBanner', data)
// 新增商品
export const postGoodAdd = (params, config = {}) => http.post('/good/add', params, config)
// 删除用户
export const deleteUser = (params, config = {}) => http.delete('/user/delete', params, config)

3.请求调用

封装好了请求拦截器和请求方法就可以使用了,先需要在js中引入相应的方法在根据具体的方法做对应的扩展和处理。

import {
        postGoodAdd
} from '../../../config/api.js'

postGoodAdd({
                        goodsName: _this.model.goodsName,
                        category: _this.model.category,
                        unit: _this.model.unit,
                        cost: _this.model.cost,
                        price: _this.model.price,
                        image: _this.model.image,
                        remark: _this.model.remark
}, {
                        custom: {
                            auth: true,
                            catch: false
                        }
}).then(() => {
                        uni.$u.toast('商品上架完成');
                        setTimeout(function() {
                               uni.$u.route('/pages/good/goodlist/goodlist');
                        }, 1000);
})

至此,这个简单的请求方法就算完成了,有需要的可以自取,赶紧去试试吧。

目录
相关文章
|
4月前
|
资源调度 JavaScript 前端开发
vue封装请求
vue封装请求
29 0
|
4月前
|
存储 JSON 前端开发
封装axios的两种方式
封装axios的两种方式
108 0
|
3月前
|
存储 JSON 自然语言处理
SSMP整合案例交互之在idea中利用vue和axios发送异步请求进行前后端调用
SSMP整合案例交互之在idea中利用vue和axios发送异步请求进行前后端调用
30 2
|
2月前
|
JavaScript API
前后端数据交互.js文件的axios的写法,想要往后端发送数据,页面注入API,await的意思是同步等待服务器数据,并返回,axios注入在其他页面,其他页面调用的时候,同步作用
前后端数据交互.js文件的axios的写法,想要往后端发送数据,页面注入API,await的意思是同步等待服务器数据,并返回,axios注入在其他页面,其他页面调用的时候,同步作用
|
4月前
|
存储 算法 JavaScript
< 今日小技巧:Axios封装,接口请求增加防抖功能 >
今天这篇文章,主要是讲述对axios封装的请求,由于部分请求可能存在延时的情况。使得接口可能存在会被持续点击(即:接口未响应的时间内,被持续请求),导致重复请求的问题,容易降低前后端服务的性能!故提出给axios封装的配置里面,新增一个防抖函数,用来限制全局请求的防抖。
< 今日小技巧:Axios封装,接口请求增加防抖功能 >
|
4月前
|
API
uniApp封装请求
uniApp封装请求
40 0
|
9月前
|
JavaScript
Vue项目—请求函数的封装
Vue项目—请求函数的封装
|
10月前
|
JavaScript 前端开发 API
vue项目中配置简单的代理与promise,并简单封装请求接口
vue项目中配置简单的代理与promise,并简单封装请求接口
49 0
|
JavaScript API
vue封装调用接口
vue封装调用接口
80 0
|
缓存 JavaScript API
vue再次进入页面不会再次调用接口请求
vue再次进入页面不会再次调用接口请求
695 0
vue再次进入页面不会再次调用接口请求