云开发定时触发器_python抢手机脚本

2022-11-17 11:27:44 浏览数 (2)

大家好,又见面了,我是你们的朋友全栈君。

文章目录

  • 一、在哪用
  • 二、怎么用
  • 三、问题
  • 四、摸索
  • 五、关于cms的webhook
  • 六、我对触发器函数文件夹的架构想法
  • 小结

微信开发文档对这个部分的使用资料很少,一个demo都没有,全靠开发者去尝试,下面跟随我的脚步,看看我是怎么试出来的吧。

一、在哪用

1.点击云开发:

2.点击“设置”->“其他设置”

3.往下拉

4.点击添加

二、怎么用

看这个图大致可以看懂,创建一个触发器,填写名称和描述之后,可以指定在一个集合上发生的某个操作(插入,删除,更新),可以指定某些字段满足某个条件的时候使用触发器。

像我们熟悉的mysql或者pg…一样,触发条件之后都会调用触发器函数,也就是上面执行动作。

重要的是触发器函数的编写。

这里执行动作可以设定触发频率,这个按照需求使用即可。

三、问题

触发器函数是当数据库集合满足条件时自动触发的,在做一些复杂的触发器业务逻辑的时候,我们需要知道是数据库的哪一条数据发生了改变。

举一个我遇到的业务逻辑: 背景:我们在做一个食品销售平台,现在做的部分是商家入驻到我们平台当中的模块,商家提交了自己商店的信息之后,我们工作人员需要审核商店的信息是否合法,这个时候有个isLegal的字段,当我们审核人员审核通过之后,通过cms将这个字段改为true,同时,我们要在鉴权集合当中给这个店主使用该商店的权限 (省流助手:我需要在isLegal字段被修改为true的那条数据上获取用户id还有商店的id加入到另外一个集合当中)

这个时候问题来了,我们怎么知道是哪条数据的isLegal被修改了,并且获取到该条数据的其他信息呢?

查文档?文档屁都没有一个

四、摸索

一个云函数主体就是这样:

代码语言:javascript复制
exports.main = async (event, context) => { 
   
  //TODO
}

而我们调用云函数的参数一般都在event当中。 也就是说,我们应该看看,在触发器函数执行的时候,系统给它传了什么值。也就是event里面是什么。

很多人就想到了,直接console.log(event)不就行了, 但是云函数部署在云端,普通调用根本看不到console.log的值,就算是本地调试的时候,我们通过手动增删改来触发条件的时候也无法触发本地调试的时候的这个触发器函数。

这个时候,我们可以找一个集合,将event的值直接添加到该集合当中,即可看到event的值

也就是在触发器函数里写

代码语言:javascript复制
await db.collection('test').add({ 
   data:event})

然后我们去手动触发触发器的条件。

到数据库里找这条数据

其他的字段都没什么意思,我们需要的是data字段的东西:

看到data里面的值,大家应该就知道这个触发器函数应该怎么写了。 RemovedFields:被移除的字段 dataType:触发这个条件的操作是什么类型的(add,update,delete) doc:这里面是被修改的那条的数据的全部数据 docId:被修改的数据的_id(也就是doc里面的_id) updatedFields:被更新的字段

我这里只是展示update的触发器的传入值,其他类型的操作读者有需要可以自行尝试。

五、关于cms的webhook

webhook的作用与触发器类似,读者也可以按照我这样的方式,去看看webhook的函数调用的时候event的值。

六、我对触发器函数文件夹的架构想法

先看我做的一个模块的触发器函数 文件夹:

一个模块的触发器可以分为多个类型的触发器(update,add,delete),我们在index.js当中根据event参数形式的值进行路由的分发: index.js:

代码语言:javascript复制
const update = require('./updateTriggers/index')
// 云函数入口函数
// 通关传入参数type进行路由选择
exports.main = async (event, context) => { 
   
  switch (event.data.dataType) { 
   
    case 'update':
      return await update.main(event.data,context)
  }
}

基于这个思想, 在类型下面还可以根据字段来进行路由的分发(我这里只是针对一个字段,针对多个字段也是按照这样的思想进行) 文件夹:

index.js

代码语言:javascript复制
const licenceStatus = require('./licenceStatus/index')
// 云函数入口函数
// 通关传入参数type进行路由选择
exports.main = async (event, context) => { 
   
  for (let property in event.updatedFields) { 
   
    switch (property) { 
   
      case 'licenceStatus':
        return await licenceStatus.main(event, context)
    }
  }
}

而在一个字段还可以根据需求进行更细致的路由分发,这就是我的一点想法。

小结

做微信云开发最难受的的事情就是,官方给的资料极少,相关的博客更少,全靠自己一点一点试出来的,唉。 有什么没做好,希望能在评论区留言,或者私信我,感谢您的观看。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/226895.html原文链接:https://javaforall.cn

0 人点赞