时间:2023-05-30 16:57:01 | 来源:网站运营
时间:2023-05-30 16:57:01 来源:网站运营
云开发 For Web:一站式开发下一代 Serverless Web 应用:近两年来,Serverless 无疑是前端圈里最火热的话题之一,在各种技术峰会、各种技术文章里都能看到它的身影。如果你是一名前端开发者,一定很奇怪:/getUser?id=123
),如果使用 Serverless 服务的话,有多快呢?module.exports = async function(events, context) { const { id } = events.query.id const userInfo = await fetchUserInfo(id) // 调用后端微服务,拉取用户信息 return userInfo}
然后发布这个云函数(假设命名为 getUser
),并且为它设置一条路由:cloudbase service:create -f getUser -p /getUser
然后你就可以通过 https://xxx.com/getUser
来拉取数据了,同时还附赠海量弹性伸缩、异地多活、日志监控等多方位的能力。// 使用 Web 端 SDKconst cloudbase = require('tcb-js-sdk')const app = cloudbase.init({ /* 初始化... */ })const db = app.database()// 插入文档await db.collection('messages').add({ author: 'stark', message: 'Hello World!'})// 查询文档const data = await db.collection('messages').where({ author: 'stark'}).get()// 更新文档await db.collection('messages').where({ author: 'stark'}).update({ message: 'Hi, Cloudbase!'})// 删除文档await db.collection('messages').where({ author: 'stark'}).remove()
const $ = db.command.aggregateconst result = await db .collection('message') .aggregate() .group({ // 以 author 字段作为 key,统计相同 author 的数量 _id: '$author' messagesCount: $.sum(1) }) .end() //=> { "_id": "stark", messagesCount: 12 }
更多的聚合搜索功能,可以参考:Aggregate | 云开发 Cloudbase// 启动事务const transaction = await db.startTransaction()// 在事务内读const data = await transaction.collection('messages') .doc({ /* <docId> */}) .get()// 在事务内写await transaction.collection('messages') .doc({ /* <docId> */}) .update({ /* <data> */})// 提交事务await transaction.commit()
watch()
方法就是为此设计的,每当数据库符合条件的文档发生变化时,都会触发 onChange
回调,示例代码如下:await db.collection('messages') .where({/* <query> */}) .watch({ onChange: snapshot => { console.log("收到snapshot!", snapshot) }, onError: error => { console.log("收到error!", error) } })
更多信息可以参考:数据库实时推送 | 云开发 Cloudbase// sum.jsmodule.exports = async function(events) { return events.a + events.b}
这一小段代码很简单,但是隐藏在它之下的却是一整套庞大的 FaaS(函数即服务)基础设施,提供了诸如弹性伸缩、日志、监控告警等多方面的能力。const cloudbase = require("tcb-js-sdk");const app = cloudbase.init({/* 初始化 */});app.callFunction({ // 云函数名称 name: "sum", // 传给云函数的参数 data: { a: 1, b: 2 } }) .then(res => { console.log(res); // 输出 "3" }) .catch(error);
// hello.jsmodule.exports = function() { return 'Hello, World!'}
然后我们直接通过命令行发布这个函数,并为它创建一条路由:$ cloudbase functions:deploy hello$ cloudbase service:create -f hello -p /hello
随后便可以通过 url 直接访问这个云函数:$ curl https://xxx.service.tcloudbase.com/helloHello, World!
具体可以参考:const cloudbase = require('@cloudbase/node-sdk')// 无需使用服务端秘钥const app = cloudbase.init()const data = await app.database().where().get()
更详细的内容可以参考:uploadFile
,就可以一步完成上面的三件事情:const tcb = require("tcb-js-sdk");const app = tcb.init({ env: 'your-env-id'})const { fileID } = await app.uploadFile({ // 云端路径 cloudPath: "/a/b/c/filename", // 需要上传的文件,File 类型 filePath: document.getElementById('file').files[0]})
uploadFile
会返回一个 fileID
,是云开发内文件的唯一标识符,我们可以使用 getTempFileURL
来获取文件 URL 访问链接:const tcb = require("tcb-js-sdk");const app = tcb.init({ env: 'your-env-id'})const { fileList } = app.getTempFileURL({ fileList: [ 'cloud://a/b/c' ]})// fileList 是一个有如下结构的对象数组// [{// fileID: 'cloud://a/b/c', // 文件 ID// tempFileURL: 'http://xxx/xxx/xxx', // 临时文件网络链接// maxAge: 120 * 60 * 1000, // 有效期// }]
更详细的内容,可以参考:wx.cloud
中)create-react-app
快速生成的脚手架项目,所以大部分构建和工程化的细节这里就略过不谈了,我们直接来看代码实现,大致上实现了三个功能,括号中是使用的云开发能力:async function init() { // 使用匿名登录 await auth.anonymousAuthProvider().signIn(); // 使用 refreshToken 的前 6 位作为 uid setUid(auth.hasLoginState().credential.refreshToken.slice(0, 6)); // 建立实时数据推送连接 await db .collection("messages") .where({}) .watch({ onChange(snapshot) { setList(snapshot.docs); setLoading(false); }, onError(err) { console.log(err); }, });}
建立实时连接之后,集合中的任何变化,都会触发 onChange()
回调,然后我们使用 setList()
来更新界面上的消息数据。sendMessage()
方法,直接使用 add()
方法向数据库写入数据就可以了:// 发送消息async function sendMessage() { const message = { timestamp: new Date().getTime(), text, uid, }; await db.collection("test").add(message); // 清空输入栏 setText("");}
当然以上只是局部的代码片段,整体代码可以参考:$ npm run build
构建产物会生成到 build
目录下。$ cloudbase hosting:deploy ./build -e your-env-id
发布完成后,你便可以通过 https://xxxx.tcb.qcloud.la/xxxx
的来访问你的应用了。进一步,你还可以为它绑定自定义域名。关键词: