开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 949|回复: 0
收起左侧

[技术分享] uniapp请求接口封装

[复制链接]
结帖率:100% (4/4)
发表于 2021-10-15 08:41:10 | 显示全部楼层 |阅读模式   河北省石家庄市
本帖最后由 xiaoxiaoxxx 于 2021-10-15 08:42 编辑

安装
[HTML] 纯文本查看 复制代码
npm install qs // 用来序列化post类型的数据

引入
[HTML] 纯文本查看 复制代码
import baseUrl from '../baseUrl'; // url地址信息import qs from 'qs' // 处理data

环境切换
uni-app 可通过 process.env.NODE_ENV 判断当前环境是开发环境还是生产环境。一般用于连接测试服务器或生产服务器的动态切换。
uniapp有自己的生产和开发环境,也可以配置其他的环境;大家可以去观看官方文档
开发环境和生产环境
[HTML] 纯文本查看 复制代码
if(process.env.NODE_ENV === 'development'){
    console.log('开发环境')
}else{
    console.log('生产环境')
}
post请求头的设置
post请求的时候,需要添加一些请求头;一般默认的请求头是:‘
application/x-www-form-urlencoded ’
[HTML] 纯文本查看 复制代码
header = {    'Content-Type': 'application/x-www-form-urlencoded',}
响应数据
当请求参数返回的时候;查看code数据,给出响应
[JavaScript] 纯文本查看 复制代码
switch (dataType.code * 1) { // 拦截返回参数
        case 0:
        resolve(dataType)
        break;
        case 1003:
                uni.showModal({
                title: '登录已过期',
                content: '很抱歉,登录已过期,请重新登录',
                confirmText: '重新登录',
                success: function(res) {
                        if (res.confirm) { // 点击确定
                        //去登录页面
                        console.log('用户');
                        uni.navigateTo({
                            // 切记这儿需要哈pages.json保持一致;不能有.vue后缀
                            url: '/pages/views/login/index'
                        });
                        } else if (res.cancel) {
                        console.log('用户点击取消');
                        }
                        }
                })
                    break;
        case -1:
            uni.showModal({
                        title: '请求数据失败',
                        content: '获取数据失败!',
                        confirmText: '确定',
                        showCancel: false,
                    success: function(res) {
                    if (res.confirm) {} else if (res.cancel) {
                        console.log('用户点击取消');
                    }
                }
        })
        break
}
完整版
[HTML] 纯文本查看 复制代码
import baseUrl from '../baseUrl';
import qs from 'qs' // 处理data
const request = (params) => {
        /*
         * 1.初始化值
         */
        let _self = this;
        let url = params.url;
        let method = params.method || 'GET';
        let data = params.data || {};
        data.token = "default-access_token" // default-access_token
        /*
         *2.判断token
         */
        if (!params.token) { // 如果没有传递token
                let token = uni.getStorageSync('token'); // 在本地查找
                if (!token) { // 如果本地没有就跳转到登录页面
                        uni.navigateTo({
                                url: 'pages/views/login/index'
                        });
                } else {
                        data.token = '179509245-9c91827e0224bdc18d0b118b8be1b5af';
                }
        }
        /*
         * 3.添加头部
         */
        let defaultOpot = {
                // 'Content-Type': 'application/x-www-form-urlencoded',
                'Terminal-Type': 'innerH5',
                'Content-Type': 'application/json;charset=UTF-8',
        }
        /*
         * 4.处理 POST
         */
        let header = {}
        method = method.toUpperCase()
        if (method == 'POST') {
                header = {
                        'Content-Type': 'application/x-www-form-urlencoded',
                }
                data = qs.stringify(data)
        }
        // 5.请求地址
        const requestUrl = baseUrl.server + url;
        uni.showLoading({
                title: '加载中...'
        });
        // 6.用 Promise 创建回调
        return new Promise((resolve, reject) => {
                uni.request({
                                url: requestUrl,
                                method: method,
                                header: Object.assign({}, defaultOpot, header),
                                data: data,
                                dataType: 'json',
                        })
                        .then(res => { // 成功
                                if (res[1] && res[1].statusCode === 200) {
                                        let {
                                                data: dataType
                                        } = res[1]
                                        switch (dataType.code * 1) { // 拦截返回参数
                                                case 0:
                                                        resolve(dataType)
                                                        break;
                                                case 1003:
                                                        uni.showModal({
                                                                title: '登录已过期',
                                                                content: '很抱歉,登录已过期,请重新登录',
                                                                confirmText: '重新登录',
                                                                success: function(res) {
                                                                        if (res.confirm) { // 点击确定
                                                                                //去登录页面
                                                                                console.log('用户');
                                                                                uni.navigateTo({
                                                                                        // 切记这儿需要哈pages.json保持一致;不能有.vue后缀
                                                                                        url: '/pages/views/login/index'
                                                                                });
                                                                        } else if (res.cancel) {
                                                                                console.log('用户点击取消');
                                                                        }
                                                                }
                                                        })
                                                        break;
                                                case -1:
                                                        uni.showModal({
                                                                title: '请求数据失败',
                                                                content: '获取数据失败!',
                                                                confirmText: '确定',
                                                                showCancel: false,
                                                                success: function(res) {
                                                                        if (res.confirm) {} else if (res.cancel) {
                                                                                console.log('用户点击取消');
                                                                        }
                                                                }
                                                        })
                                                        break
                                        }
                                }
                        })
                        .catch(err => { // 错误
                                reject(err)
                        })
                        .finally(() => {
                                console.log('不管是否成功都要执行')
                                uni.hideLoading();
                        })
        })
}
export default request

在api中封装接口
[HTML] 纯文本查看 复制代码
import request from '../../utils/request.js'

/*
* 1.获取商城楼层列表
*/
export function getFloorList(){
        return request({
                url:'/***',
                method:'get'
        })
}

export function getCartProducts(){
        return request({
                url:'/***',
                method:'POST'
        })
}

在组件中使用引入
[HTML] 纯文本查看 复制代码
import {getFloorList,getCartProducts} from '../../api/mall/index.js';

使用
[HTML] 纯文本查看 复制代码
getFloorList().then(res=>{
        this.list = res.data
})


评分

参与人数 1好评 +1 精币 +2 收起 理由
冰点 + 1 + 2 感谢分享,很给力!~

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表