用户
 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,登录网站

小程序社区 首页 教程 实战教程 查看内容

uni-app中h5端和小程序数据请求封装和传参

Rolan 2020-11-20 09:34

uni-app中h5端和小程序数据请求封装和传参

1.开发环境 uni-app

2.电脑系统 windows10专业为版

3.在使用uni-app开发的过程中,我们需要数据请求,但是使用uni-app 框架自带的请求方式我们需要写很多重复的代码,我进行了封装,希望对你有所帮助,为什么要封装h5端数据请求还要封装微信端的数据请求,下面会有所解释!

4.封装前的数据请求方法:

chengeth5(){
            return new Promise((resolve,reject)=>{
                uni.request({
                    url:'/api/feng', //请求接口
                    method:'post',  //请求方法
                    data:this.ChenindexconOnj,//传递的参数
                    success:(res)=>{
                        // console.log(res);//输出请求到的数据
                        resolve(res);
                    },
                })
            })
        },        

5.对h5端数据请求封装,在 pages 目录下新建 h5hhtp 文件,在文件下新建一个 h5hhp.js,添加如下代码:

function req(obj) {
    return new Promise((resolve, reject) => {
        // const HOST = baseUrl;
        const HOST = 'http://192.168.137.78:3000';  //请求后台地址
        var method = obj.method || "GET"; //请求方式,默认为GET
        var url = HOST + obj.url || "";
        var url =  obj.url || "";
        var data = obj.data || {};
        var header = obj.header || obj.method == ('post' || 'POST') ? {
            'Content-Type': obj.contentType || 'application/x-www-form-urlencoded',
        } : {
            'Content-Type': obj.contentType || 'application/json',
        };
        var success = obj.success; // 成功回调函数
        var fail = obj.fail; //表示失败后,要执行的回调函数
        uni.request({
            url: url,
            data: data,
            method: method,
            header: header,
            success: ((res) => {
                if (res.statusCode === 203) {
                    console.log('返回203状态码')
                    // 错误处理,返回登录页
                    // uni.reLaunch({url:'/pages/login/index'})
                } else if (res.statusCode === 200) {
                    resolve(res)
                }
            }),
            fail: ((err) => {
                reject(err)
            })
        })
    })
}
export default req

6.在http目录同级,新增 api 文件,在api目录下,新建一个 api.js,添加代码如下:

import req from '../h5http/h5http.js'  //导入封装的 h5数据请求
let api = {};

//请求数据
// getfeng 表示方法名; data 表示参数;method 表示请求方法 ;url 表示请求接口
api.getfeng = data => {
    return req({
        url: '/api/feng',
        method: 'post',
        data: data
    })
};

export default api

7.在vue模板中使用,在methods中添加如下代码:

chengeth5(){
            api.getfeng({name:'陈',age:'100'}).then((res)=>{
                console.log(res);
            })
},

8.在onLoad中添加如下代码:

// #ifdef H5
this.chengeth5();
// #endif

9.运行到浏览器,效果如下:

9-1.传参效果为:


10.现在我们来证明一下这个封装在微信端能使用吗?在onLoad中添加如下代码:

// #ifdef MP-WEIXIN
this.chengeth5();
// #endif

11.效果如下:


我们看到了同样的方法在 h5端就没问题,但是在 微信端不行,所以我才会对h5数据请求和微信端的数据请求进行了不同的封装

12.对微信端数据请求封装,在 pages 同级新增 wxhttp,在文件wxhttp 下新增 wxhttp.js,添加代码如下:

const BASE_URL='http://192.168.137.78:3000';
export const myRequest=(options)=>{
    return new Promise((resolve,reject)=>{
        uni.request({
            url:BASE_URL+options.url,//请求接口
            method:options.method || 'GET', //请求方法,默认为 GET
            data:options.data || {}, //传递的参数
            success:(res)=>{
                if(res.statusCode !==200){  //做一个判断,如果http状态返回的不是200,表示数据请求失败了
                    return uni.showToast({
                        title:'获取数据失败'
                    })
                }
                resolve(res)
            },
            fail:(err)=>{
                uni.showToast({
                    title:'请求接口失败'
                })
                reject(err)
            }
        })
    })
}

13把微信封装的数据请求挂载到全局,在main.js中添加如下如下:

import {myRequest} from 'wxhttp/wxhttp.js';
Vue.prototype.$myRequest=myRequest;

14.在vue模板中华使用,在methods中添加如下代码:

async chenwxget(){
    let res=await this.$myRequest({
        url:'/feng', //请求接口
        method:'post', //请求方式
        data:this.chenWxObj, //传递的参数
    })
    console.log(res);
},

15.把项目运行到微信小程序,效果如下:


15-1.传参效果为:

16.我们把封装的微信请求方法,简单的修改,运行到h5端,在 onLoad中添加如下代码:

// #ifdef MP-WEIXIN
this.chenwxget();
// #endif

17.运行到浏览器效果如下:


我们看到这个图,我们知道微信封装的数据请求在 h5是不能使用的,h5端封装的请求不能在微信端使用,所以我才对 h5端数据请求和微信端数据请求进行了不同的封装。

18.解决方法,在onLoad中使用条件编译,使用不同的数据请求封装,在methods中添加代码如下:

chengeth5(){
    api.getfeng({name:'陈',age:'100'}).then((res)=>{
        console.log(res);
    })
},

async chenwxget(){
let res=await this.$myRequest({
    url:'/feng',
    method:'post',
})
console.log(res);
},

19.在onLoad中添加如下代码:

// #ifdef H5
this.chengeth5();
// #endif
// #ifdef MP-WEIXIN
this.chenwxget();
// #endif

20.运行到h5端,效果为:

21.运行到微信小程序,效果为:

鲜花
鲜花
鸡蛋
鸡蛋
分享至 : QQ空间
收藏