例如我写了一个公共模块,里面的功能是向数据库的log表写日志。这个公共模块被其他公共模块所引用。写法如下
wlog-公共模块(写日志用的)
getuser-公共模块(用来获取用户信息的)
Switch-普通云函数(用来接收请求的)。
依赖关系,switch依赖getuser,
getuser 依赖wlog
具体上代码
//wlog-公共模块
const db = uniCloud.database() //数据库常量
module.exports = function(openid, type, data) {
db.collection('log').add({
oid: openid,
type: type,
data: data,
date: Date.now()
});
return
}
//getuser-获取用户信息公共模板
const db = uniCloud.database() //数据库常量
const wlog = require('wlog')
module.exports = async function(openid) {
let obj = new Object()
let user = await db.collection('user').where({oid:openid}).get()
obj = user.data[0]
wlog(openid,6003,obj)//此处写入操作日志
return obj
}
//switch
'use strict';
const checktoken = require('checktoken')
const getuser = require('getuser')
exports.main = async (event, context) => {
let objreturn = new Object()
objreturn.errmsg = ''
objreturn.err = false
if (event.type == null) {
objreturn.errmsg = '未知请求类型'
objreturn.err = true
return objreturn
}
if (event.token == ''||!("token" in event)) {
objreturn.errmsg = '请求没有携带token'
objreturn.err = true
return objreturn
}
let user = checktoken(event.token) //所有行为必须带有token
if (user.renew) {
objreturn.errmsg = '用户信息过期,请从新打开小程序'
objreturn.err = true
return objreturn
}
switch (event.type) {
case 6003:
objreturn = getuser(user.openid) //获取用户信息仅需要openid
break;
default:
objreturn.errmsg = '未找到请求类型'
objreturn.err = true
break;
}
//返回数据给客户端
return objreturn
};
上面的代码第一次运行时并不会写入任何日志,客户端会返回用户信息。
只有连续请求时才会写入。这是种灵异事件吧。连续请求时会执行写入证明代码逻辑并无问题。
太长时间不请求即写入失败。有点像冷启动写入失效的样子。
i***@lzc.im (作者)
原来如此,难怪我就觉得很诡异。我原本的思路是不需要等待的。毕竟日志写入等了也没奖励。也不需要返回点啥。本地测试完全没有问题
2022-10-10 14:07