原生小程序开发-API、网络请求封装

297 阅读3分钟

API(官网:developers.weixin.qq.com/miniprogram… 三大类API:事件监听类API(以on开头,监听事件触发)、同步API(以sync结尾)、异步API(如wx.request)

一、界面交互API

wx.showToast({})轻提示
wx.showToast({

            title: '删除成功!',//提示的内容

            icon: 'success',//图标

            duration: 2000,//提示的延迟时间

        })
wx.showModal({})弹框
wx.showModal({

            title'提示',//标题

            content'提示的内容',//内容

            success(res) {//成功的回调函数

                if (res.confirm) {

                    console.log('用户点击确定')

                } else if (res.cancel) {

                    console.log('用户点击取消')

                }

            },

        })
wx.showLoading({})加载中。需主动调用 wx.hideLoading 才能关闭提示框
wx.showLoading({

            title'加载中',// 显示加载中

        })

        setTimeout(function () {

            wx.hideLoading() // 隐藏加载中

        }, 2000)

二、数据缓存API

wx.setStorageSync(string key, any data)同步保存

将数据存储在本地缓存中指定的 key 中。会覆盖掉原来该 key 对应的内容。除非用户主动删除或因存储空间原因被系统清理,否则数据都一直可用。单个 key 允许存储的最大数据长度为 1MB,所有数据存储上限为 10MB。

wx.setStorageSync('USER', { name'jack', passwordd123 })

        const user = wx.getStorageSync('USER')

        console.log('user ', user)
wx.setStorage(string key, any data)异步保存
wx.setStorage({

            key'list',

            data: [{ name'rose' }],

            encrypttrue, // 若开启加密存储,setStorage 和 getStorage 需要同时声明 encrypt 的值为 true

            success(res) {

                wx.getStorage({

                    key'list',

                    encrypttrue, // 若开启加密存储,setStorage 和 getStorage 需要同时声明 encrypt 的值为 true

                    success(res) {

                        console.log(res.data)

                    },

                })

            },

        })

三、网络数据请求(小程序中不存在跨域问题)

出于安全性方面的考虑,小程序官方对数据接口的请求做出了如下两个限制:

1、只能请求 HTTPS 类型的接口

2、必须将接口的域名添加到信任列表中

后台配置request合法域名:

登录自己的微信小程序管理后台->左侧列表点击”开发“->右侧面板选择”开发设置“->找到”服务器域名“->点击”修改“,修改request合法域名->点击”保存并提交“(域名只支持https协议;不能使用IP地址或localhost;必须经过ICP备案(后端);服务器域名一个月内最多可申请5次修改)

微信开发者工具配置request合法域名:

打开微信开发者工具->点击右上角”详情“->选择”项目配置“->设置”request合法域名“(配置成功后,才能请求该域名下所有的接口)

如何跳过request合法域名校验:(仅在开发与调试阶段使用)

在实际开发中,如果后端只提供了http协议的接口,暂未提供https协议的接口

打开微信开发者工具->点击右上角”详情“->选择”本地设置“->勾选”不校验合法域名...“选项

四、网络API

wx.request({})发起GET/POST数据请求
wx.request({

          url:'https://10.7.163.165:8089/api/shop',//请求的接口地址

          method:'GET',//请求的方式GET/POST
          
          data:{},//发送到服务器的数据

          success:(res)=>{//请求成功的回调

            console.log(res)

            this.setData({list})

          }

        })

五、网络请求封装:

1. utils工具文件夹中创建一个request.js文件,用于封装网络请求

request.js文件

/**

 * 封装网络请求

 *   {

 *       url:''

 *       method:'get',

 *       data:,

 *   }

 */

const baseUrl = 'https://10.7.163.165:8089'

export const axiosInstance = options => {

  return new Promise((resolve, reject) => {

    wx.request({

      url: baseUrl + options.url,

      method: options.method,

      data: options.data,

      successres => {

        resolve(res.data)

      },

      failerror => {

        reject(error)

      }

    })

  })

}
2. utils同级目录创建一个api文件夹,api文件夹下创建js文件,用于封装项目中所有用到的请求接口

js文件

import { axiosInstance } from '../utils/request.js'

 

/**

 * 商品列表

 */

export const RequestGoodsList = ()=>{

    return axiosInstance({

      url:'/api/shop',

      method:'get',

      data:{},

    })

}
3. 页面中使用,页面js文件中引入接口,调用即可
import {RequestGoodsList  } from "../../api/goods.js";

Page({

    /**

     * 页面的初始数据

     */

    data: {

        list: [], // 商品列表

    },

 

    onLoad() {

        this.getGoodsList()

    },

 

    /**

     * 获取商品列表接口

     */

    async getGoodsList() {

        const data = await RequestGoodsList()

        const {resultCode,resultInfo} = data

        if(resultCode === 1){

            const list = resultInfo.list

            this.setData({list})

        }

    },

})