以聚合数据免费接口为例,通过 Class 类继承方法,让小程序实现项目化接口调用

微信小程序数据来源,是通过接口实现的。但接口如何调,数据如何取?每个人都有不同的方法,下面以聚合数据免费接口为例。

配置接口 config.js

聚合数据请求接口需要以key作为参数。

const config = {
    api_base_url: "http://apis.juhe.cn/goodbook",
    key: "93bdf89de207034fa6c7544f88b99c76"
};

export {
    config
}

封装 wx.request 方法

ES6 中有类方法可以直接使用,使用 HTTP 作为类名,新建 request 作为类的方法,在这个方法中调用 wx.request。

class HTTP{
  
  //request
  request(params) {
    let that = this;

    if (!params.method) {
      params.method = 'GET';
    }
    wx.request({
      url: config.api_base_url + params.url + "?key=" + config.key,
      data: params.data,
      method: params.method,
      header: {
        'content-type': 'application/json'
      },
      success:(res)=>{
        let code = res.statusCode.toString();
          let error_code = res.error_code;

        if(code.startsWith("2")){
          wx.showToast({
            title: res.data.reason,
          });

          //通过回调函数将获取的值回传
          params.success(res.data);
        } else{
            this._show_message(error_code);
        }
      },
      fail:(err)=>{
          console.log("err    " + err)
      }
    });
  }

    //显示报错信息
    _show_message(error_code){
        if(!error_code){
            error_code == 1
        }
        wx.showToast({
            title: tips[error_code],
            icon:'error',
            duration:2500
        })
    }
}

export {
    HTTP
}

这个 request 方法有用到基本接口配置文件config以及请求成功或失败后提示的报错信息,需要将 config 导入,并定义接口报错信息。

小程序的文件引用路径必须用相对路径,使用绝对路径可能会导致路径指向不正确。

import {config} from "../config";

const tips = {
    1:"不好意思,错了",//默认错误
    205001:"图片类目为空",
    205002:"图书类目ID不能为空",
    205003:"查询不到结果",
    10001:"错误的请求KEY",
    10002:"该KEY无请求权限",
    10003:"KEY过期",
    10004:"错误的OPENID",
    10005:"应用未审核超时,请提交认证",
    10007:"未知的请求源",
    10008:"被禁止的IP",
    10009:"被禁止的KEY",
    10011:"当前IP请求超过限制",
    10012:"请求超过次数限制",
    10013:"测试KEY超过请求限制",
    10014:"系统内部异常",
    10020:"接口维护",
    10021:"接口停用"
}

外部使用 request 方法时,必须将这个 class 实例化:

const http = new Class();
const request = http.request();

使用 Module 作为不同业务处理数据的方法

业务不同,接口不同,调用接口的参数以及返回的数据也不同。比如,catalog 这个业务,包含查询 catalog ,catalog 详情,catalog 目录等,不能使用同一个 request 处理,也尽量不要在 Pages 中直接调用接口,可能会带带来的安全问题,因此需要将处理数据的方法以业务的不同分别写。每个人不同,可能写法不同,但是在实操时应该有这样的想法的。

通过继承 HTTP Class 直接调用 request 方法请求数据。

例,查询 catalog:

class ClassCatalogModel extends HTTP{

    getCatalog(sCallback) {
      this.request({
        url: "/catalog",
        success: (res) => {
          // 通过回调方法将数据将数据获取到
          sCallback(res)
        }
      })
    }
}

export {
    ClassCatalogModel
}
sCallback 作为promise中成功之后的回调方法,将获取的数据返回。小程序中的所有数据请求大都是异步请求,因此使用 callback 将数据回调是比较合理的。

在页面加载后触发 Module 方法

通常数据是在 onLoad 方法中加载并执行。这里需要注意,更新数据需要用到 setData 方法,建议在 data 中定义要 setData 的对象名称。

import { ClassCatalogModel } from '../../models/classCatalog.js';
let catalogModel = new ClassCatalogModel();
Page({

  /**
   * 页面的初始数据
   */
  data: {
    catalogData: null
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    catalogModel.getCatalog((res)=>{
        if(res != null || res != ''){
            this.setData({
                catalogData: res.result
            });
            console.log(this.data.catalogData);
        }
    })
  }
})

使用 Class 类可以方便的继承类中的各个方法,这比 ES5 的通过修改原型链实现继承,要清晰和方便很多。

猜你喜欢

转载自www.cnblogs.com/baiyygynui/p/11514382.html