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