近期,小程序开放了新的能力——「小程序·云开发」,帮助开发者快速构建微信小程序的后端服务。我做为一名微信小程序的开发者,也在第一时间尝试了小程序云开发,并将我本身在开发过程当中的经验分享给你们。前端
简单的来讲,小程序云开发是一款 Serverless 服务,他为开发者提供了「云函数」、「云数据库」和「云文件存储」,而且将这些能力封装成特定的接口,以 wx.cloud.xxx
来进行调用。数据库
首先,小程序云开发不是 PaaS ,它和咱们所熟悉的 BAE、Google App Engine 不一样,所提供的云函数并非完整的环境,而是以一个特定的事件为单位的。严格来讲,它所提供的云函数功能实际上是 FaaS (Function as a Service),同类型的产品有 LeanCloud 的云函数、 Bmob 的云函数、AWS 的 Lambda、 Azure 的 Functions 和 Google Cloud Functions。小程序
其次,小程序云开发不是 LeanCloud 、 Bmob 之类的 BaaS 。不一样于上述的两款产品,他们提供了丰富的 API 接口,可以实现各类各样的功能,小程序·云开发将接口进行深度的封装,仅能在小程序、云函数中经过 wx.cloud 和 wx-server-sdk 来调用(截止2018年8月24日)。所以,小程序云开发 仅能应用在小程序中,没法在其余产品中应用(好比 App )后端
全部的业务逻辑都仅仅须要在小程序端完成,无需过于复杂的管理逻辑(这是由于云函数、云数据库没法在小程序之外的区域调用,所以没法实现强大的 Web 管理界面)微信小程序
小程序云开发能够自动实现用户登陆的校验,开发者无需再次校验用户身份,直接经过云函数的 event.userInfo.openId
便可获取到用户信息。直接调用数据库 、文件存储 API 时,也会自动关联到用户对应的 openId ,若是用户受权小程序获取昵称等信息,这些信息也会自动出如今小程序云开发的管理控制台中的用户登陆部分。不须要开发者手动上传。promise
目前小程序云开发提供了免费 1GB 的数据库存储和 免费 5 GB 的文件存储,这个存储量并非很大,可是对于一些我的开发者来讲,仍是绰绰有余的,开发者可使用这些容量来快速开发本身的小程序。微信
小程序云开发的调用很是的简单,你只须要了解 JavaScript 和一些简单的异步的知识 (promise),就能够完成小程序云开发的内容。less
const cloud = require('wx-server-sdk') cloud.init() const db = cloud.database() // 云函数入口函数 //分页查询云函数 exports.main = async(event, context) => { var dbName = event.dbName; //集合名称 var filter = event.filter ? event.filter : null; var pageIndex = event.pageIndex ? event.pageIndex : 1; var pageSize = event.pageSize ? event.pageSize : 10; const countResult = await db.collection(dbName).where(filter).count() //获取集合总记录 const total = countResult.total; //获得总记录数 const totalPage = Math.ceil(total / pageSize) //计算须要多少页 var hasMore; //提示前端是否还有数据 if (pageIndex > totalPage || pageIndex == totalPage) { //没有数据了 返回false hasMore = false } else { hasMore = true } //最后查询数据返给前端 return db.collection(dbName).where(filter).skip((pageIndex - 1) * pageSize).limit(pageSize).get().then(res => { res.hasMore = hasMore; return res }) }
let that = this wx.cloud.callFunction({ name: 'todoList',//云函数名称 data: { dbName: 'todoList',//所请求的库 pageIndex: that.data.pageIndex, //当前页数 pageSize: that.data.pageSize//一页返回的条数 }, success: function (res) { console.log(res.result, '[todoList][活动列表]') that.setData({ things: that.data.things.concat(res.result.data), hasMore: res.result.hasMore }) }, fail: res => { console.log(res) } })