前言
沉寂了一段时间,西瓜君终于又回来了,偶然得知了云开发这个东西,感觉很香。于是自己空闲时间采用小程序云开发整了一个小程序。
项目已开源,托管在github上:TimePostOffice
- 个人小程序-“TimePostOffice(时光邮局)”
开发者可以使用云开发开发微信小程序、小游戏,无需搭建服务器,即可使用云端能力。
云开发为开发者提供完整的原生云端支持和微信服务支持,弱化后端和运维概念,无需搭建服务器,使用平台提供的 API 进行核心业务开发,即可实现快速上线和迭代,同时这一能力,同开发者已经使用的云服务相互兼容,并不互斥。
我就不吹了,文档 传送门,下面就开始介绍开发(踩坑)过程
1. 模板搭建
技术栈:采用的是基于React的 Taro,版本 v1.3.4,安装好Taro环境之后,开始用cli创建一个云开发模板
taro init mypro
然后就是一些选择,"默认模板"选择“云开发模板”,然后就创建好了。
2. 申请小程序 appid
云开发必须要有appid,所以必须先 申请小程序 ,拿到appid之后填入 project.config.json,参考 微信小程序云开发模板
3. 把模板小程序跑起来
-
进入到 client 目录,执行下面的操作安装依赖包
npm i
-
执行下面命令,打包预览小程序
npm run dev:weapp
打开微信开发工具,导入项目(目录是项目根目录),即可预览
4. 开通云开发、创建环境
创建了第一个云开发小程序后,在使用云开发能力之前需要先开通云开发。在开发者工具工具栏左侧,点击 “云开发” 按钮即可打开云控制台、根据提示开通云开发、创建云环境。默认配额下可以创建两个环境,各个环境相互隔离,每个环境都包含独立的数据库实例、存储空间、云函数配置等资源。每个环境都有唯一的环境 ID 标识,初始创建的环境自动成为默认环境。
云环境配置好了之后,整个流程就可以跑通了
踩坑
- 我的前端请求模板
//设置用户
setUser: (userInfo)=>{
return Taro.cloud
.callFunction({
name: "controller",
data: {
api:'setUser',
payload: userInfo
}
})
.then(res => res)
.catch(err => err)
}
- 我的云函数接口模板
let { api, payload = {}, userInfo: { openId } } = event
//新建用户&获取数据库中的用户
if (api === 'setUser') {
return db.collection('User').where({openId,}).get()
.then(res=>{
if(res.data[0]){
return res.data[0]
}else{
payload.openId = openId
return db.collection('User').add({
data: payload
})
.then(res => {
return { code: 'success', msg: '插入数据成功' }
})
.catch(err => {
return { code: 'fail', msg: '插入数据失败' }
})
}
})
}
发送邮件采用的是 nodemailer,邮箱开通POP3/SMTP服务,nodemailer配置里面密码是开通POP3/SMTP服务之后拿到的授权码
巨坑(云函数同步代码执行完了,异步还没执行完,会直接销毁内存)(本地调试不会,云端会)
这个坑卡了我两天时间,在我的发送邮件的云函数 nodemailer, 所有的异步操作都使用了 async/await 来变为同步操作,解决了这个bug
尾声
写这个东西纯粹是一时兴起,在这期间踩了一些坑,小的就没写出来了,如果有朋友碰到,可以在下面回复提出来,我知道的可以交流一下。也欢迎大家使用这个小程序
以上