背景
- 无需服务器,云函数实现服务器接口逻辑
- 无需数据库,云开发自动集成数据库,这是类似mongdb(hash存储)
- 服务端无要认证,便可以获取用户的openid, uninid。
- 无需申请oss, 自动配置文件服务。
如果你是个前端er,自己可以通过类似node实现后端的接口服务器
云函数
个云函数就相当与一个http服务。
exports.main = (event, context) => {
// 这里添加逻辑代码 然后返回
return {
event,
openid: wxContext.OPENID,
appid: wxContext.APPID,
unionid: wxContext.UNIONID,
}
}
复制代码
一个函数,你可以处理单独逻辑,也可以把它当成所有逻辑的入口分发到不同的函数
exports.main = async (params, context) => {
let funName = params.actionName || 'find'
delete params.actionName
let res;
switch(funName) {
case 'del':
res = await del(params);
break;
case 'create':
res = await create(params);
break;
case 'update':
res = await update(params);
break;
default:
res = await find(params);
}
return res;
}
复制代码
当然一个函数可以当成模块儿入口,在这里可以引入express,koa框架,根据参数的不同转发到不同的模块
注意: 这里获取用户的openid, unioid官方文档都有自行查阅
云数据库
查看如上图一样
- 集合名称相当于数据库的表名。
- 这里没有库的概念,这里的库在用的时候,可以通过 env 选择。
const env = 'dev' // 这里是环境Id 不是名称
const DB = cloud.database({ env })
复制代码
- 当前环境目前一个账号只能申请两个,也没有开通收费服务,大家省点用
- 遵照以下步骤就可以拿到一个model的对象
const cloud = require('wx-server-sdk')
cloud.init()
const env = 'xxxx'
const DB = cloud.database({ env })
const userModel = DB.collection('user')
复制代码
- 这里就可以参照文档的实现自己的增删改查了
async function find() {
return await userModel
.where({}) // 搜索条件
.skip((page-1)*pageSize) // 分页
.limit(pageSize)
.orderBy('addTime', 'desc') // 排序
.get().then(res => {
console.log(res) // 结果
})
}
复制代码
云存储
文件存储的查看如下
- cloud:// 开头的协议引用目前只有在小程序适用
小程序端调用
1 需要在project.config.json 规定小程序根目录,服务端根目录
2 需要在app.js 初始化cloud
3 调用云函数
wx.cloud.callFunction({
name: pathArr[0], // 这里是传给后端的参数
data,
}).then().catch() // 返回一个promise 对象
复制代码
感悟总结
- 逻辑上更简化了,http接口调用变成了函数调用模式。
- 省钱,需要申请的小程序,就可以实现,无需买服务器,大环境,搞数据库。
- 简单一个前端同学完全可以搞定一切。
- 目前感觉逻辑不是很复杂的可以用,但是高并发,用户量大的就算了吧。