真香.小程序云开发(时光邮局小程序)

本文已发布在西瓜君的个人博客,原文传送门

前言

沉寂了一段时间,西瓜君终于又回来了,偶然得知了云开发这个东西,感觉很香。于是自己空闲时间采用小程序云开发整了一个小程序。

项目已开源,托管在github上:TimePostOffice

  • 个人小程序-“TimePostOffice(时光邮局)”
    小程序码

开发者可以使用云开发开发微信小程序、小游戏,无需搭建服务器,即可使用云端能力。
云开发为开发者提供完整的原生云端支持和微信服务支持,弱化后端和运维概念,无需搭建服务器,使用平台提供的 API 进行核心业务开发,即可实现快速上线和迭代,同时这一能力,同开发者已经使用的云服务相互兼容,并不互斥。


我就不吹了,文档 传送门,下面就开始介绍开发(踩坑)过程

1. 模板搭建

技术栈:采用的是基于React的 Taro,版本 v1.3.4,安装好Taro环境之后,开始用cli创建一个云开发模板

taro init mypro

然后就是一些选择,"默认模板"选择“云开发模板”,然后就创建好了。

2. 申请小程序 appid

云开发必须要有appid,所以必须先 申请小程序 ,拿到appid之后填入 project.config.json,参考 微信小程序云开发模板

3. 把模板小程序跑起来

  1. 进入到 client 目录,执行下面的操作安装依赖包

npm i

  1. 执行下面命令,打包预览小程序

npm run dev:weapp

  1. 打开微信开发工具,导入项目(目录是项目根目录),即可预览

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

尾声

写这个东西纯粹是一时兴起,在这期间踩了一些坑,小的就没写出来了,如果有朋友碰到,可以在下面回复提出来,我知道的可以交流一下。也欢迎大家使用这个小程序


以上

posted @ 2020-01-15 09:58  大西瓜鸭  阅读(653)  评论(1编辑  收藏  举报