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);
})

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

目录
相关文章
|
7月前
|
资源调度 JavaScript 前端开发
vue封装请求
vue封装请求
37 0
|
7月前
|
存储 JSON 前端开发
封装axios的两种方式
封装axios的两种方式
129 0
|
1月前
|
JavaScript
vue封装一个查询URL参数方法
通过以上步骤,我们在Vue.js项目中封装了一个查询URL参数的方法 `getQueryParam`,并在Vue组件中成功应用。这种封装方式不仅提高了代码的复用性,还使得代码更加清晰和易于维护。
14 1
|
7月前
|
API
uniApp封装请求
uniApp封装请求
55 0
|
7月前
|
JavaScript API
解决Vue项目请求接口跨域的问题,配置Vue项目index.js代理请求服务器端接口
解决Vue项目请求接口跨域的问题,配置Vue项目index.js代理请求服务器端接口
解决Vue项目请求接口跨域的问题,配置Vue项目index.js代理请求服务器端接口
|
JavaScript
Vue项目—请求函数的封装
Vue项目—请求函数的封装
|
JavaScript
vue封装axios请求工具类
vue封装axios请求工具类
117 0
|
JavaScript 前端开发 API
vue项目中配置简单的代理与promise,并简单封装请求接口
vue项目中配置简单的代理与promise,并简单封装请求接口
59 0
|
缓存 JavaScript API
vue再次进入页面不会再次调用接口请求
vue再次进入页面不会再次调用接口请求
718 0
vue再次进入页面不会再次调用接口请求
|
JavaScript API
vue封装调用接口
vue封装调用接口
91 0