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

配置接口 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 的通过修改原型链实现继承,要清晰和方便很多。

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

  1. 用聚合数据API(苏州实时公交API)快速写出小程序

    利用聚合数据API快速写出小程序,过程简单. 1.申请小程序账号 2.进入开发 3.调用API.比如“苏州实时公交”小程序,选择的是苏州实时公交API. 苏州实时公交API文档:https://www ...

  2. 微信小程序的Web API接口设计及常见接口实现

    微信小程序给我们提供了一个很好的开发平台,可以用于展现各种数据和实现丰富的功能,通过小程序的请求Web API 平台获取JSON数据后,可以在小程序界面上进行数据的动态展示.在数据的关键 一环中,我们 ...

  3. 微信小程序PHP 微信支付接口调用

    小程序端 /** * 微信支付接口 */ wxPaymoney:function (out_trade_no, true_money){ //out_trade_no 后台统一下单接口需要用 var ...

  4. 在WePY中实现了小程序的组件化开发,组件的所有业务与功能在组件本身实现,组件与组件之间彼此隔离,上述例子在WePY的组件化开发过程中,A组件只会影响到A所绑定的myclick

    wepyjs - 小程序组件化开发框架 https://tencent.github.io/wepy/document.html#/?id=%e5%be%ae%e4%bf%a1%e5%b0%8f%e7 ...

  5. Java集合为什么设计为:实现类继承了抽象类,同时实现抽象类实现的接口

    更好阅读体验:Java集合为什么设计为:实现类继承了抽象类,同时实现抽象类实现的接口 问题 Java集合源码为什么设计为:「实现类继承了抽象类,同时实现抽象类实现的接口?」 看着List 集合的UML ...

  6. 记录一次用宝塔部署微信小程序Node.js后端接口代码的详细过程

    一直忙着写毕设,上一次写博客还是元旦,大半年过去了.... 后面会不断分享各种新项目的源码与技术.欢迎关注一起学习哈! 记录一次部署微信小程序Node.js后端接口代码的详细过程,使用宝塔来部署. 我 ...

  7. 微信小程序的短信接口

    使用聚合数据 (网址)  https://www.juhe.cn/docs? 注册部分略! 这是登录部分的. 一: 二.我的接口

  8. 整合微信小程序的Web API接口层的架构设计

    在我前面有很多篇随笔介绍了Web API 接口层的架构设计,以及对微信公众号.企业号.小程序等模块的分类划分.例如在<C#开发微信门户及应用(43)--微信各个项目模块的定义和相互关系>介 ...

  9. 微信小程序---客服消息接口调用,拿来即用

    如果本文对你有用,请爱心点个赞,提高排名,帮助更多的人.谢谢大家!❤ 如果解决不了,可以在文末进群交流. 如果对你有帮助的话麻烦点个[推荐]~最好还可以follow一下我的GitHub~感谢观看! 在 ...

随机推荐

  1. CamlQuery对SharePointOnline List 发起查询请求

    最近的项目中遇到了一个需求,需要向SharePointList 查询Item是否存在,找到了CamlQuery这样一个方法,但是没有找到使用这个接口的频率限制说明文档,于是就有了这篇随笔. 新接触这个 ...

  2. 【Swift】WKWebView与JS的交互使用

    一.前言 近日,有朋友问我关于WKWebView与JS的交互问题,可我之前一直使用的是UIWebView,也不曾做过WKWebView的交互啊!接下来大家一块学习下WKWebView是怎么实现原生代码 ...

  3. oracle常用查询sql

    oracle常用查询sql 原创 gordon陈 发布于2018-05-10 22:32:18 阅读数 297 收藏 展开 #!/bin/sh## create by Gordon Chen echo ...

  4. Scrapy对接Selenium

    首先pip安装selenium,然后下载浏览器驱动 WebDrive下载地址 chrome的webdriver:http://chromedriver.storage.googleapis.com/i ...

  5. SP2713 GSS4 - Can you answer these queries IV 分块

    问题描述 LG-SP2713 题解 分块,区间开根. 如果一块的最大值是 \(1\) ,那么这个块就不用开根了. 如果最大值不是 \(1\) ,直接暴力开就好了. \(\mathrm{Code}\) ...

  6. 解决:Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?

    简单粗暴法 删除锁 $ sudo rm /var/cache/apt/archives/lock $ sudo rm /var/lib/dpkg/lock 如果还不行,重启虚拟机 $ reboot

  7. CSP 2019 游记

    Day -32 开坑. 没什么好说的,等个 5 天等初赛(应该叫第一轮认证)挂掉之后就能弃坑了. 今天开始停课,虽然每天只停半天,但是感觉还是特别的舒服~ 然而得等初赛过了才能全天停课-- 没关系,熬 ...

  8. 隐马尔可夫模型(HMM)及Viterbi算法

    HMM简介 对于算法爱好者来说,隐马尔可夫模型的大名那是如雷贯耳.那么,这个模型到底长什么样?具体的原理又是什么呢?有什么具体的应用场景呢?本文将会解答这些疑惑. 本文将通过具体形象的例子来引入该模型 ...

  9. Unity BehaviorDesigner行为树基础总结

    BehaviorDesigner——行为树,用于控制和实现AI逻辑,类似于这样: 上面这个行为树实现了这样的逻辑: 当Player有Input时按照Input值来移动,无Input时查找最近的可攻击目 ...

  10. 使用pymysql模块进行封装,自动化不可或缺的数据库校验

    import pymysql class HandleMysql: ''' 定义一个mysql处理类 ''' def __init__(self, hostname, username, passwo ...