接下来我们通过一个具体的小程序案例来介绍一下云开发过程中遇到的一些问题。
开发者可以使用云开发开发微信小程序、小游戏,无需搭建服务器,即可使用云端能力。
云开发为开发者提供完整的原生云端支持和微信服务支持,弱化后端和运维概念,无需搭建服务器,使用平台提供的 API 进行核心业务开发,即可实现快速上线和迭代,同时这一能力,同开发者已经使用的云服务相互兼容,并不互斥。
能力 | 作用 | 说明 |
---|---|---|
云函数 | 无需自建服务器 | 在云端运行的代码,微信私有协议天然鉴权,开发者只需编写自身业务逻辑代码 |
数据库 | 无需自建数据库 | 一个既可在小程序前端操作,也能在云函数中读写的 JSON 数据库 |
存储 | 无需自建存储和 CDN | 在小程序前端直接上传/下载云端文件,在云开发控制台可视化管理 |
云调用 | 无需自建数据库 | 基于云函数免鉴权使用小程序开放接口的能力,包括服务端调用、获取开放数据等能力 |
接下来 我们重点介绍一下 开发 这个小程序过程中遇到的一些问题以及是如何解决的。趣文沸点 是一个在线 语录、格言、段子查询类工具
1. 鉴权如何处理?
在小程序开发过程中需要加一个用户关注的功能,因此需要用户进行授权获取唯一标识以便 与数据进行关联。 传统的开发模式如下图所示: 通过 wx.login()获取code然后将之发送至后台服务再结合 appid 和 appsecret 通过一些加密规则 调用微信接口获取 openid等信息,然后开发者服务器自定义用户的登录状态返回返回至小程序前台页面。整个流程还是相对较复杂的。 在云开发模式中,官方提供了 clound.getWXContext()函数 ,其背后已经将开发者服务器与微信接口服务交互的逻辑打通,用户层面直接通过其 获取OPENID,APPID, UNIONID等唯一标识。只需通过小程序与云函数间对用户的信息进行处理。 2. 微信服务端已开放云调用的接口,如何使用? 这里我们通过具体的代码来介绍一下 以 security.msgSecCheck 如何使用1) 在云函数的config.json 中添加如下配置
{
"permissions": { // 需要授权的接口
"openapi": [
"security.msgSecCheck",
]
}
}
2) 封装函数对外暴露
云函数文件:openapi.js
const cloud = require('wx-server-sdk');
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
});
exports.main = async (event, context) => {
return await cloud.openapi.security.msgSecCheck({ content: event.content });
}
3) 业务代码中调用
wx.cloud.callFunction({
name: 'openapi',
data: {
content: cont
},
success: res => {
// 具体逻辑处理
},
fail: err => {
// 接口调用异常梳理
}
});
const cloud = require('wx-server-sdk');
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
});
let db = cloud.database();
1) 查询
db.collection("表名").where(db.command.and([{
cont: db.RegExp({ // cont 支持模糊搜索
regexp: `.*${event.cont}`,
options: 'i'
}),
types: db.command.in([0, 1, 2, 3]) // 类目查询
}]))
.orderBy('字段名', 'desc')
.orderBy('字段名', 'asc')
.skip(0)
.limit(20)
.get()
2) update 操作
db.collection("表名").doc("_id").update({
data: {
likes: db.command.inc(1) // 模拟字段,点击 自增加1
}
});
3)添加操作
db.collection("表名").add({
data: {
createTime: db.serverDate(), // 系统时间
likes: 0,
}
});
4)更新表结构
db.collection('表名').where({
type: db.command.eq(3) // 类型为 3
})
.update({
data: {
createTime: db.serverDate() // 新增字段
}
});
5) 删除操作
db.collection('表名').doc("_id").remove()
云服务器的选择
https://github.com/blue68/wx-qwfd