开发者能够应用云开发开发微信小程序、小游戏,无需搭建服务器,即可应用云端能力。云开发为开发者提供残缺的原生云端反对和微信服务反对,弱化后端和运维概念,无需搭建服务器,应用平台提供的 API 进行外围业务开发,即可实现疾速上线和迭代,同时这一能力,同开发者曾经应用的云服务互相兼容,并不互斥。
云开发提供了几大根底能力反对:
能力 | 作用 | 阐明 |
---|---|---|
云函数 | 无需自建服务器 | 在云端运行的代码,微信公有协定人造鉴权,开发者只需编写本身业务逻辑代码 |
数据库 | 无需自建数据库 | 一个既可在小程序前端操作,也能在云函数中读写的 JSON 数据库 |
存储 | 无需自建存储和 CDN | 在小程序前端间接上传/下载云端文件,在云开发控制台可视化治理 |
云调用 | 原生微信服务集成 | 基于云函数免鉴权应用小程序凋谢接口的能力,包含服务端调用、获取凋谢数据等能力 |
云开发官网文档
云开发控制台
云开发提供了一个控制台用于可视化治理云资源。控制台蕴含以下几大模块。
- 概览:查看云资源的总体应用状况
- 用户治理:查看小程序的用户拜访记录
- 数据库:治理数据库汇合、记录、权限设置、索引设置,能够增加,导入和导出数据
- 存储管理:治理云文件、权限设置,上传的图片,视频等文件能够在存储里看到
- 云函数:治理云函数、查看调用日志、监控记录,
- 统计分析:查看云资源具体应用统计
初始化(小程序端和云函数端)
小程序端
在小程序端开始应用云能力前,需先调用 wx.cloud.init
办法实现云能力初始化
App({ onLaunch: function () { if (!wx.cloud) { console.error('请应用 2.2.3 或以上的根底库以应用云能力') } else { wx.cloud.init({ // env 参数阐明: // env 参数决定接下来小程序发动的云开发调用(wx.cloud.xxx)会默认申请到哪个云环境的资源 // 此处请填入环境 ID, 环境 ID 可关上云控制台查看 // 如不填则应用默认环境(第一个创立的环境) env: 'my-env-id', // 是否在将用户拜访记录到用户治理中,在控制台中可见 traceUser: true, }) } this.globalData = {} }})
env还能够传入对象,指定各个服务的默认环境,可选字段能够去文档外面查找
云函数端
const cloud = require('wx-server-sdk')// 初始化 cloudcloud.init({ // API 调用都放弃和云函数以后所在环境统一 env: cloud.DYNAMIC_CURRENT_ENV})
留神:env
设置只会决定本次云函数 API 调用的云环境,并不会决定接下来其余被调云函数中的 API 调用的环境,在其余被调云函数中须要通过 init
办法从新设置环境。(每一个云函数都要调用 init
)
倡议:在设置 env
时指定 cloud.DYNAMIC_CURRENT_ENV
常量 (需 SDK v1.1.0
或以上) ,这样云函数内发动数据库申请、存储申请或调用其余云函数的时候,默认申请的云环境就是云函数以后所在的环境:
云函数上手
创立cloudfunctions文件夹,外面寄存所有云函数,而后在我的项目根目录里创立 project.config.json
文件,新增 cloudfunctionRoot
字段,指定本地已存在的目录作为云函数的本地根目录,实现指定后,图标会变成“云目录图标”
{ "cloudfunctionRoot": "./`cloudfunctions`/"}
接着,在cloudfunctions目录上右键,抉择创立一个新的Node.js云函数,命名为login,创立胜利后会看到login文件夹外面有以下三个文件
- config.json:配置文件
- index.js:入口文件
- package.json
登录函数
小程序有很多需要都须要拿到openid和unionid等用户登录信息,一般的做法是拿到长期code跟后盾换信息,云开发不须要这么简单
云开发的云函数的独特劣势在于与微信登录鉴权的无缝整合。当小程序端调用云函数时,云函数的传入参数中会被注入小程序端用户的 openid,开发者无需校验 openid 的正确性,因为微信曾经实现了这部分鉴权,开发者能够间接应用该 openid。与 openid 一起同时注入云函数的还有小程序的 appid。从小程序端调用云函数时,开发者能够在云函数内应用
wx-server-sdk
提供的getWXContext
办法获取到每次调用的上下文(appid
、openid
等),无需保护简单的鉴权机制,即可获取人造可信赖的用户登录态(openid
)。
上面就是具体的实现办法:
const cloud = require('wx-server-sdk')// 初始化 cloudcloud.init({ // API 调用都放弃和云函数以后所在环境统一 env: cloud.DYNAMIC_CURRENT_ENV})/** * 这个示例将经主动鉴权过的小程序用户 openid 返回给小程序端 * event 参数蕴含小程序端调用传入的 data */exports.main = async (event, context) => { console.log(event) console.log(context) // 可执行其余自定义逻辑 // console.log 的内容能够在云开发云函数调用日志查看 // 获取 WX Context (微信调用上下文),包含 OPENID、APPID、及 UNIONID(需满足 UNIONID 获取条件)等信息 const wxContext = cloud.getWXContext() return { event, openid: wxContext.OPENID, appid: wxContext.APPID, unionid: wxContext.UNIONID, env: wxContext.ENV, }}
云函数的传入参数有两个,一个是event
对象,一个是context
对象。event
指的是触发云函数的事件,当小程序端调用云函数时,event
就是小程序端调用云函数时传入的参数,外加后端主动注入的小程序用户的 openid 和小程序的 appid。context
对象蕴含了此处调用的调用信息和运行状态,能够用它来理解服务运行的状况。
在模板中也默认require
了wx-server-sdk
,这是一个帮忙咱们在云函数中操作数据库、存储以及调用其余云函数的微信提供的库
在小程序端调用这个云函数前,咱们须要先将这个云函数部署到云端才能够。在云函数目录上右键,能够将云函数整体打包上传并部署到线上环境中。
上传胜利后login文件夹的icon会变成绿色的,证实咱们曾经部署胜利了
咱们能够到云开发控制台>云函数的云函数列表外面看到咱们部署的云函数
部署实现后,咱们能够在小程序中调用该云函数:
小程序端调用云函数
wx.cloud.callFunction({ name: 'login', data: {}, success: res => { console.log('[云函数] [login] user openid: ', res.result.openid) app.globalData.openid = res.result.openid }, fail: err => { console.error('[云函数] [login] 调用失败', err) }})
能够到Netword > cloud外面看到申请