云开发的云函数是一种基于云端的服务,它可以帮助开发者快速构建应用程序。它是一种无服务器的计算技术,可以在云端运行代码,而无需担心服务器的维护、扩展或者其他问题。
云函数是一个独立的、自包含的代码片段,它可以在不同的平台上运行,并且能够被其他应用调用。它不需要你去部署或者配置服务器,也不需要你去处理请求或者响应。它只是一个独立的代码片段,当你调用它时,它就会执行你想要实现的功能。
// 使用 Node.js 创建一个云函数 exports.main = async (event, context) => { console.log('event: ', event) return { sum: event.a + event.b } }
tcb-router是基于Nodejs koa风格的云开发云函数轻量级的类路由库,可以用于优化前端(小程序端)调用服务端的云函数时的处理逻辑。我们可以使用它在一个云函数里集成多个类似功能的云函数,比如针对某个集合的增删改查;也可以把后端的一些零散功能集成到一个云函数里,便于集中管理等。
tcb-router主要用于小程序端调用云函数时的处理逻辑,在小程序端使用wx.cloud.callFunction调用云函数时,我们需要在name里传入要调用的云函数名称,以及在data里传入要调用的路由的路径;而在云函数端使用app.router来写对应的路由的处理函数。
使用开发者工具,创建一个云函数,如router,然后在package.json增加tcb-router最新版latest的依赖并用npm install安装:
"dependencies": {
"wx-server-sdk":"latest",
"tcb-router": "latest"
}
然后在index.js里输入以下代码,其中app.use
表示该中间件适用于所有的路由,而app.router("user")
则适用于路由为字符串"user"的中间件,ctx.body
为返回给小程序端的数据,返回的方式是通过return app.serve()
:
const cloud = require("wx-server-sdk")
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV,
})
const TcbRouter = require("tcb-router");
exports.main = async (event, context) => {
const app = new TcbRouter({event})
const {OPENID} = cloud.getWXContext()
app.use(async (ctx, next) => {//适用于所有的路由
ctx.data = {} //声明data为一个对象
await next();
})
app.router("user",async (ctx, next)=>{//路由为user
ctx.data.openId = OPENID
ctx.data.name = "李东bbsky"
ctx.data.interest = ["爬山","旅游","读书"]
ctx.body ={ //返回到小程序端的数据
"openid":ctx.data.openId,
"姓名":ctx.data.name,
"兴趣":ctx.data.interest
}
})
return app.serve()
}
而在小程序端,我们可以用事件处理函数或者生命周期函数来调用创建好的router云函数,就能在res对象里获取到云函数router返回的ctx.body里的对象了:
wx.cloud.callFunction({
name: "router",
data: {
$url: "user", //路由为字符串user,注意属性为 $url
}
}).then(res => {
console.log(res)
})
使用tcb-router还可以管理数据库的集合,我们可以把一个集合(也可以是多个集合)的add、remove、update、get等集成到一个云函数里,可以看下面具体的案例,我们在router云函数里输入以下代码:
const cloud = require("wx-server-sdk")
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV,
})
const TcbRouter = require("tcb-router");
const db = cloud.database()
const _ = db.command
const $ = db.command.aggregate
exports.main = async (event, context) => {
const collection= "" //数据库的名称
const app = new TcbRouter({event})
const {adddata,deleteid,updatedata,querydata,updateid,updatequery} = event
app.use(async (ctx, next) => {
ctx.data = {}
await next();
});
app.router("add",async (ctx, next)=>{
const addresult = await db.collection(collection).add({
data:adddata
})
ctx.data.addresult = addresult
ctx.body = {"添加记录的返回结果":ctx.data.addresult}
})
app.router("delete",async(ctx,next)=>{
const deleteresult = await db.collection(collection).where({
id:deleteid
}).remove()
ctx.data.deleteresult = deleteresult
ctx.body = {"删除记录的返回结果":ctx.data.deleteresult}
})
app.router("update",async(ctx,next)=>{
const getdata = await db.collection(collection).where({
id:updateid
}).update({
data:updatedata
})
ctx.data.getresult = getdata
ctx.body = {"查询记录的返回结果":ctx.data.getresult}
})
app.router("get",async(ctx,next)=>{
const getdata = await db.collection(collection).where(querydata).get()
ctx.data.getresult = getdata
ctx.body = {"查询记录的返回结果":ctx.data.getresult}
})
return app.serve();
}
然后再在小程序端相应的事件处理函数里使用wx.cloud.callFunction传入相应的云函数以及相应的路由$url
以及传入对应的data值即可:
//新增一条记录
wx.cloud.callFunction({
name: "router",//router云函数
data: {
$url: "add",
adddata:{
id:"202006031020",
title:"云数据库的最佳实践",
content:"<p>文章的富文本内容</p>",
createTime:Date.now()
}
}
}).then(res => {
console.log(res)
})
//删除一条记录
wx.cloud.callFunction({
name: "router",
data: {
$url:"delete",
deleteid:"202006031020"
}
}).then(res => {
console.log(res)
})
//查询记录
wx.cloud.callFunction({
name: "router",
data: {
$url:"get",
querydata:{
id:"202006031020",
}
}
}).then(res => {
console.log(res)
})
关于tcb-router更多进阶用法,可以查看技术文档:tcb-router Github地址。使用tcb-router时的一些说明:
第十六章 应用程序发布在今天的文章中,我们将重点探讨通过Google Play软件商店进行应用程序发布,不过如果愿意,大家也可以选择...
mongodb不支持事务,所以,在你的项目中应用时,要注意这点。无论什么设计,都不要要求mongodb保证数据的完整性。但是mongodb提...