记微信小程序开发踩过的坑

如何获取用户标识--openid

刚开始上手项目,就被openid难住了,官方文档中对于openid的获取方式这对于还未接触到云函数的新手实在不友好。说明中提到的“开发者服务器”是个大麻烦,甚至还需要解密code才能获取到需要的数据。

官方文档:
1.调用 wx.login() 获取 临时登录凭证code ,并回传到开发者服务器。
2.调用 auth.code2Session 接口,换取 用户唯一标识 OpenID 和 会话密钥 session_key。

学到后面才知道,使用云函数就能很方便的获取到用户的openid,这足矣应付类似团队实验室打卡的简单小程序。有云函数加持,简单的小程序开发就不需要大动干戈使用服务器,同时免费云函数套餐质量也出奇的高,这样看来微信对于小型开发者还是很友好的。

如何在小程序中使用npm

对于不想使用微信简陋原生组件的开发者,官方的开发软件也很友好的提供了npm 支持。在第一步执行npm i指令时有个小坑,对于新手稍不注意就会敲错地方。

官方文档:
1. 安装 npm 包
在小程序 package.json 所在的目录中执行命令安装 npm 包

小程序开发的“项目文件夹”和“小程序主目录”并不是一回事,默认的小程序主目录是项目文件夹下的miniprogram/文件夹,同级的还有云函数文件夹cloudfunctions/。当我们想在小程序中引入第三方的包时,需要先cd miniprogram/npm i。新手如果在项目文件夹中执行指令,就会出现npm构建失败的提示。

如何上手云函数本地环境调试

云函数和小程序端的js代码一样,都是运行在node环境中。小程序端的运行环境不一,过多的数据库操作放在小程序中会造成不同设备体验上的差异。
云函数生来就是解决这些问题的,但对于云函数再小的代码修改都需要上传部署才能测试,一个在本地模拟云端运行的云函数调试就显得很有必要。前面说过,云函数是基于node环境运行的,所以调试本地的云函数就需要先安装好各种包(特别是wx-server-sdk)。
对本地目录中的云函数文件夹右键,选择“在外部终端打开”,执行npm i就能在本地安装好调试云函数的所有环境。

如何在云函数中获取正确的时间

如果在云函数中使用到了Date(),就特别需要注意,运行云函数的实例默认的环境时区是UTC+0,并不是中国时间,所以根据官方文档的要求,我们需要配置函数的环境变量,设置 TZ 为 Asia/Shanghai。
这个环境的设置在“云开发控制台”-“云函数”-对应云函数的“版本管理”-“配置”,在弹出的窗口中设置环境变量的Key为“TZ”,Value为“Asia/Shanghai”即可。
有个取巧的方法,在小程序调用的时候就传入一个Date()。需要注意的是在云函数端需要用new Date(event.time)取出,在这里不能省略new,否则取出的值将会是字符串。

小程序端和云函数端在get数据库时的写法差异

小程序端:
db.collection('xxx').where({xxx}).get({
    success:res=>{
        console.log(res)
    }
})
小程序端、云函数端:
const res = await db.collection('xxx').where({xxx}).get()
console.log(res)

对于云函数端,get的参数不能放任何东西,需要用await,把返回的结果对象赋值给另一个变量才可使用,否则会报错,并且这个错误似乎没有人指出是什么造成的,当时反复测试对比才发现不能这样写,文档中似乎没有说明。