程序的云开发:
开发者可以使用云开发开发微信小程序、小游戏,无需搭建服务器,即可使用云端能力。
云开发为开发者提供完整的原生云端支持和微信服务支持,弱化后端和运维概念,无需搭建服务器,使用平台提供的 API 进行核心业务开发,即可实现快速上线和迭代,同时这一能力,同开发者已经使用的云服务相互兼容,并不互斥。
云开发提供了几大基础能力支持:
能力 | 作用 | 说明 |
---|---|---|
云函数 | 无需自建服务器 | 在云端运行的代码,微信私有协议天然鉴权,开发者只需编写自身业务逻辑代码 |
数据库 | 无需自建数据库 | 一个既可在小程序前端操作,也能在云函数中读写的 JSON 数据库 |
存储 | 无需自建存储和 CDN | 在小程序前端直接上传/下载云端文件,在云开发控制台可视化管理 |
云调用 | 原生微信服务集成 | 基于云函数免鉴权使用小程序开放接口的能力,包括服务端调用、获取开放数据等能力 |
打开并登录微信开发者工具,新建小程序项目,填入 AppID,后端服务选择“小程序·云开发”并勾选同意"云开发服务条款":
在使用云开发能力之前,需要先开通云开发。
在开发者工具的工具栏左侧,点击 “云开发” 按钮即可打开云控制台,根据提示开通云开发,并且创建一个新的云开发环境。
云开发目录
这里要设置的是开发时或者程序运行时使用的云环境,如果选择错误,则可能找不到前面创建的云函数
打开app.js
我们需要配置env和traceUser字段
env代表我们当前选择的云环境ID
traceUser 设置为true之后我们的操作就可以在日志中可见
开通创建环境后,即可以开始在模拟器上操作小程序体验云开发提供的部分基础能力演示
我们打开云开发控制台
云开发提供了一个 JSON 数据库,顾名思义,数据库中的每条记录都是一个 JSON 格式的对象。
一个数据库可以有多个集合(相当于关系型数据中的表),集合可看做一个 JSON 数组,数组中的每个对象就是一条记录,记录的格式是 JSON 对象。
1.初始化(调用获取默认环境的数据库的引用)
const db = wx.cloud.database()
2.通过数据库引用上的 collection 方法获取一个集合的引用
const todos = db.collection('集合名')
3.在集合对象上调用 add 方法往集合中插入一条记录
exports.main = async (event, context) => { let res = await db.collection('todos').add({ data:{ desc:'我是新插入的数据', done:true, due:new Date(), style:{ color:'blue' } } }) return res }
4.使用 update 方法可以只更新指定的字段,其他字段不受影响。
exports.main = async (event, context) => { try { return await db.collection('集合名').where({ name : 'alice' }).update({ data: { age:100 }, }) } }
5.对记录使用 remove 方法可以删除该条记录
exports.main = async (event, context) => { try { return await db.collection('集合名').where({ name : 'alice' }).remove() } }
编写云函数,查询数据库并返回数据
新建云函数 music,编写如下代码
// 云函数入口文件 const cloud = require('wx-server-sdk') cloud.init({ env: 'test-2gw33xcpbb0f6b27', traceUser: true, }) const db = cloud.database() // 云函数入口函数 exports.main = async (event, context) => { // console.log(event) let res = await db.collection('todos').where({ desc:event.desc }).get() return res }
注意: cloud.init 方法需要配置参数,特别需要指明 env 否则测试时可能会一直提示 “database collection not exists
Cannot find module ‘wx-server-sdk’
这个错误别管他怎么来的
只需要在当前云函数目录下打开终端
npm install --save wx-server-sdk@latest
每个控件的云函数是有限制的,所以我们应该尽量利用每一个云函数,将业务相关的代码写道一个云函 数中
所以这里的云函数与常规后台开发中的 api 不太一样
路由
安装
注意是云函数安装
npm install --save tcb-router
云函数中引入
const TcbRouter=require('tcb-router')
修改云函数代码
// 云函数入口文件 const cloud = require('wx-server-sdk') const TcbRouter = require('tcb-router') cloud.init({ env: 'test-5gngkp7l028ba32b', traceUser: true, }) // 云函数入口函数 exports.main = async (event, context) => { const app = new TcbRouter({ event }); app.router('playlist', async (ctx, next) => { let res = await cloud.database().collection('playlist') .skip(event.start) .limit(event.count) .orderBy('createTime', 'desc') .get() ctx.body = res // await next(); // 执行下一中间件 }) return app.serve(); }
在页面中引用
let res = await wx.cloud.callFunction({ name:'music', data:{ $url:'playlist', start:this.data.playlist.length, count:15 } })