云函数
编写云函数
// 云函数入口文件
const cloud = require('wx-server-sdk')
const TcbRouter = require('tcb-router')
const axios = require('axios')
cloud.init({
env: 'test-2gero0zpba5fa8d7',
traceUser: true
})
// 云函数入口函数
exports.main = async (event, context) => {
const app = new TcbRouter({ event });
app.router('playlist', async (ctx, next) => {
let res = await cloud
.database()
.collection('playlist')
.skip(event.start)
.limit(event.count)
.orderBy('createTime', 'desc')
.get()
ctx.body = res
})
上传并部署云函数
插入数据
// 云函数入口文件
const cloud = require('wx-server-sdk')
wx.cloud.init({
env: 'test-2gero0zpba5fa8d7',
traceUser: true,
})
const db = cloud.database()
// 云函数入口函数
exports.main = async (event, context) => {
let res=await db.collection('todos').add({
data:{
description:'插入的数据信息',
done:false,
due:new Date(),
tags:['hello','world'],
style:{color:'blue'}
}
})
return res
}
获取音乐信息
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({
env: 'test-2gero0zpba5fa8d7',
traceUser: true,
})
const axios=require('axios')
// 云函数入口函数
exports.main = async (event, context) => {
let res= await axios.get('http://api.daqitc.net/top/playlist?limit=10&order=new'+event.page+'&order=new')
return res.data
}
更新一条数据
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({
env: 'test-2gero0zpba5fa8d7',
traceUser: true,
})
const db = cloud.database()
// 云函数入口函数
exports.main = async (event, context) => {
db.collection('todos').doc('79550af26086254511231e47138a276c').update({
// data 传入需要局部更新的数据
data: {
// 表示将 done 字段置为 true
description:'更改最新的数据',
done: true
},
success: function(res) {
console.log(res.data)
}
})
}
更新多条数据
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({
env: 'test-2gero0zpba5fa8d7',
traceUser: true,
})
const db = cloud.database()
// 云函数入口函数
exports.main = async (event, context) => {
let res=await db.collection('todos').doc('cbddf0af60862ce303bcf9f946bf36c0').set({
data:{
description:'全部更新为最新的数据信息',
due: new Date("2020-04-26"),
tags: [
"success",
"word"
],
style: {
color: "orange"
},
done:true,
},
success: function(res) {
console.log(res.data)
}
})
}
云函数路由
每个控件的云函数是有限制的,所以我们应该尽量利用每一个云函数,将业务相关的代码写道一个云函
数中
所以这里的云函数与常规后台开发中的 api 不太一样
1.每个 api 的功能应该尽量单一
2.每个云函数应该尽量处理多的任务,当然这些任务是相关的,比如推荐歌单、热门歌单、音乐搜索
等
安装
npm install --save tcb-router
云函数中引入
const TcbRouter=require('tcb-router')
修改云函数代码
// 云函数入口文件
const cloud = require('wx-server-sdk')
const TcbRouter = require('tcb-router')
const axios = require('axios')
cloud.init({
env: 'test-2gero0zpba5fa8d7',
traceUser: true
})
// 云函数入口函数
exports.main = async (event, context) => {
const app = new TcbRouter({ event });
app.router('playlist', async (ctx, next) => {
let res = await cloud
.database()
.collection('playlist')
.skip(event.start)
.limit(event.count)
.orderBy('createTime', 'desc')
.get()
ctx.body = res
})
app.router('musiclist',async(ctx,next)=>{
let res=await axios.get(`http://api.daqitc.net/playlist/detail?id=${event.playlistId}`)
ctx.body=res.data
})
app.router('songurl',async (ctx,next)=>{
let res=await axios.get(`http://api.daqitc.net/song/url?id=${event.musicid}`)
ctx.body = res.data
})
return app.serve()
}
在云函数中使用 wx-server-sdk
云函数中使用 wx-server-sdk 需在对应云函数目录下安装 wx-server-sdk 依赖,在创建云函数时会在云函数目录下默认新建一个 package.json 并提示用户是否立即本地安装依赖。请注意云函数的运行环境是 Node.js,因此在本地安装依赖时务必保证已安装 Node.js,同时 node 和 npm 都在环境变量中。如不本地安装依赖,可以用命令行在该目录下运行:
npm install --save wx-server-sdk@latest
在云函数中调用其他 API 前,同小程序端一样,也需要执行一次初始化方法:
const cloud = require('wx-server-sdk')
// 给定字符串环境 ID:接下来的 API 调用都将请求到环境 some-env-id
cloud.init({
env: 'some-env-id'
})