什么是小程序·云开发
小程序云开发是陌陌团队与腾讯云团队共同开发的一套小程序基础能力。 简而言之:云能力将成为小程序的基础能力。 整套功能基于新推出的云开发(TencentCloudBase)腾讯云基地开发的一整套小程序后台开发解决方案。
小程序云开发为开发者提供完整的云流程,简化前端开发和运维概念,无需搭建服务器,利用平台提供的API进行核心业务开发,实现快速上线和迭代。
该解决方案目前支持三个基本功能:
未来我们将整合更多的服务能力,为小程序提供更强大的云支持。
如何使用小程序云开发
里面是小程序云开发的简单使用图:在小程序端,直接使用官方的socket,在云功能端,直接使用官方提供的NodeSDK来操作你的云资源。 以前启动伙伴程序时所担心的数据库建设和文件系统部署都没有了。
您只需要在小程序开发IDE上拥有云开发,激活它,填写环境ID,就可以拥有小程序的云能力!
事实上,云开发虽然与原有后端架构并不冲突,但也可以通过如下架构无缝兼容原有后端服务,这也简化了一些小程序信令的逻辑:
接下来我会分别从小程序端和服务器端来介绍如何使用这个云资源。
使用云能力小程序
客户端,这里指的是小程序端。 如果您想使用云开发能力,请进行以下配置:
//app.js
App({
onLaunch: function () {
wx.cloud.init({
traceUser: true // 用户信息会显示在云开发控制台的用户面板中
});
}
});
小程序终端初始化能力文档
在用户管理中,会显示使用云能力的小程序的访问用户列表。 默认安排访问时间。 访问时间的触发点是小程序端调用wx.cloud.init,traceUser参数传入true。
服务器
如果您想操作云函数中的文件、数据库、云函数资源,可以使用我们提供的服务端SDK进行操作。 首先,进入您的云功能之一并安装以下依赖项:
npm i --save tcb-admin-node
在云函数中初始化
// 初始化示例
const app = require('tcb-admin-node');
// 初始化资源
// 云函数下不需要secretId和secretKey。
// env如果不指定将使用默认环境
app.init({
secretId: 'xxxxx',
secretKey: 'xxxx',
env: 'xxx'
});
//云函数下使用默认环境
app.init()
//云函数下指定环境
app.init({
env: 'xxx'
});
服务器初始化文档
店铺
云开发提供存储空间、上传文件、下载文件、CDN加速文件访问等能力。 开发者可以通过API在小程序端和服务器端使用该能力。
小程序
// 选择图片
wx.chooseImage({
success: dRes => {
// 上传图片
const uploadTask = wx.cloud.uploadFile({
cloudPath: `${Date.now()}-${Math.floor(Math.random(0, 1) * 10000000)}.png`, // 随机图片名
filePath: dRes.tempFilePaths[0], // 本地的图片路径
success: console.log,
fail: console.error
});
},
fail: console.error,
});
小程序端存储文档
服务器
const app = require('tcb-admin-node');
app.init();
app.uploadFile({
cloudPath: "cover.png",
fileContent: fs.createReadStream(`${__dirname}/cover.png`)
}).then((res) => {
console.log(res);
}).catch((err) => {
console.error(err);
});;
安慰
上传的文件将出现在嘉义控件中,如右图所示。 您可以在控制台中删除、下载或查看图片的详细信息。
还可以控制文件的整体权限,这里有一些具体的介绍。
将文档存储在服务器上
数据库
小程序云提供了一个面向文档的数据库。 数据库包含多个集合(相当于关系数据中的表)。 该集合类似于 JSON 链表。 链表中的每个对象都是一条记录。 记录的格式是JSON文档。
每条记录都有一个 _id 数组来唯一标识这条记录,还有一个 _openid 数组来标识该记录的创建者,即小程序的用户。 开发者可以自定义_id,但无法在小程序端(服务器端)自定义_openid。 _openid是在创建文档时系统默认根据小程序用户创建的,开发者可以用它来标记和定位文档。
数据库API分为两部分:小程序端和服务器端。 小程序端API有严格的调用权限控制,开发者可以直接调用小程序中的API来操作非敏感数据。 对于安全性要求较高的数据,可以通过云功能中的服务器端API进行操作。 云函数环境与客户端完全隔离,数据库可以在云函数上私密、安全地操作。
数据库API包括添加、删除、修改和查询的能力。 使用API操作数据库只需要三个步骤:获取数据库引用、构造查询/更新条件、发送请求。 请记住,在操作数据库之前,请在控制器上创建一个集合。
小程序
const db = wx.cloud.database();
// 插入数据
db.collection('photo').add({
data: {
photo: 'cloud://tcb-xxx/05ca1d38f86f90d66d4751a730379dfa6584dde05ab4-Ma9vMN_fw658.jpg',
title: '风景'
}
});
// 提取数据
db.collection('photo').get().then((res) => {
let data = res.data;
console.log(data);
});
// 输出
// 在小程序端, _openid 会自动插入到数据库中
{
photo: 'cloud://tcb-xxx/05ca1d38f86f90d66d4751a730379dfa6584dde05ab4-Ma9vMN_fw658.jpg',
title: '风景',
_openid: 'oLlMr5FICCQJV-QgVLVzKu2312121'
}
小程序数据库文档
服务器
const app = require('tcb-admin-node');
app.init();
const db = app.database();
db.collection('photo').limit(10).get().then((res) => {
console.log(res);
}).catch((err) => {
console.error(err);
});
// 输出
// 因为是在服务端,其它用户的也可以提取出来
{
photo: 'cloud://tcb-xxx/05ca1d38f86f90d66d4751a730379dfa6584dde05ab4-Ma9vMN_fw658.jpg',
title: '风景',
_openid: 'oLlMr5FICCQJV-QgVLVzKu4312121'
}
{
photo: 'cloud://tcb-xxx/0dc3e66fd6b53641e328e091ccb3b9c4e53874232e6bf-ZxSfee_fw658.jpg',
title: '美女',
_openid: 'DFDFEX343xxdf-QgVLVzKu3312121'
}
{
photo: 'cloud://tcb-xxx/104b27e339bdc93c0da15a47aa546b6e9c0e3359c315-L8Px2Y_fw658.jpg',
title: '动物',
_openid: 'DFDFEX343xxdf-QgVLVzKu3412121'
}
服务器数据库文档
安慰
您可以在控制台中看到用户操作的数据,也可以自己在控制台上添加、更新或删除数据。
如果数据量很大小程序开发全栈网站,可以设置索引来提高查询效率。
数据库还可以通过设置权限来控制每个集合。
云功能
云函数是一段运行在云端的代码。 您无需管理服务器,只需在开发工具中一键上传部署即可运行前端代码。
开发者可以在云函数中获取每次调用的上下文(appid、openid等)小程序开发全栈网站,无需维护复杂的轮询机制即可获取自然可信的用户登录状态(openid)。
小程序
wx.cloud.callFunction({
name: 'addblog', // 云函数名称
data: { // 传到云函数处理的参数
title: '云开发 TCB',
content: '存储、数据库存、云函数'
}
}).then(res => {
console.log(res)
}).catch((err) => {
console.error(err);
});
小程序云函数文档
服务器
const app = require("tcb-admin-node");
app.init();
app.callFunction({
name: 'addblog', // 云函数名称
data: { // 传到云函数处理的参数
title: '云开发 TCB',
content: '存储、数据库存、云函数'
}
}).then((res) => {
console.log(res);
}).catch((err) => {
console.error(err);
});
服务器云函数文档
安慰
云函数上传后,会在此处列出。
每次调用云函数时,都可以在这里听到日志,还可以构造测试参数进行调试。
句子糖
目前大多数socket都支持两种写入方式,即Promise和Async/Await。 本节以callFunction作为反例来介绍云函数中的这两种写法。 Async/Await本质上是一种基于Promise的语法糖。 它只是将 Promise 转换为同步写入。
承诺
const app = require("tcb-admin-node");
app.init();
exports.main = (event, context, callback) => {
app.callFunction({
name: 'addblog', // 云函数名称
data: { // 传到云函数处理的参数
title: '云开发 TCB',
content: '存储、数据库存、云函数'
}
}).then((res) => {
console.log(res);
callback(null, res.data);
}).catch((err) => {
callback(err);
});
};
异步/等待
const app = require("tcb-admin-node");
app.init();
exports.main = async (event, context) => {
let result = null;
try {
result = await app.callFunction({
name: 'addblog', // 云函数名称
data: { // 传到云函数处理的参数
title: '云开发 TCB',
content: '存储、数据库存、云函数'
}
});
}
catch (e) {
return e;
}
return result;
};
用在云函数中,因为是在Node8.9以上的环境,所以天然支持Async/Await询问方式,但是如果用在小代码端,就需要引入Polyfill,比如正如这个开源项目:regenerator
开发者资源
由于小程序·云开发是基于腾讯云的云开发开发功能,所以腾讯云和小程序双方都有很多开发者资源,这里供大家参考: