⼩助⼿之wechaty模块(个⼈笔记,于⼈⽆⽤)
//请注意,这是⼀篇⾃⾔⾃语的笔记,不是科普⽂。
⽬前在做⼀个项⽬,通过的⽅式接收⽇程信息以及发送提醒的信息。
这就需要能够在服务端登陆,并且能够接收信息,以及能定时发送提醒信息的功能了。
分⼀下,就是
1 服务端登陆
2 能够接收别⼈发送来的信息,也即信息可以被服务端取到。
3 能通过发送提醒。
在github上转了⼀圈,盯上了⼀个叫wechaty的开源项⽬,github/wechaty/wechaty,经过⼀番研究,发现满⾜了登陆,接收要求,发送的要求,也即箭头所⽰。
接下来怎么放到我的项⽬中,可以很优雅的使⽤呢(egg.js)?
----------待研究
在github上发现了⼀个相关项⽬:
可以研究下在egg下怎么⽤。
运⾏不起来,需要端⼝6379,难道是因为⽤到了redis的缘故?
经过研究这个项⽬的router.js,发现好像是通过http接⼝的形式触发的,那现在我想要启动egg.js的项⽬时就要启动这个进程~
解决办法,在app.js这⾥写。
async didLoad() {
// 所有的配置已经加载完毕
// 可以⽤来加载应⽤⾃定义的⽂件,启动⾃定义的服务
// 例如:创建⾃定义应⽤的⽰例
this.app.queue = new Queue(fig.queue);
await this.app.queue.init();
}
这个⽣命周期函数~
发现:
async didLoad() {
// 所有的配置已经加载完毕
// 可以⽤来加载应⽤⾃定义的⽂件,启动⾃定义的服务
// 例如:创建⾃定义应⽤的⽰例
Wechaty.instance() // Global Instance
.on('scan', (qrcode, status) => console.log(`Scan QR Code to login: ${status}\napi.qrserver/v1/create-qr-code/?
data=${encodeURIComponent(qrcode)}`))
.on('login',            user => console.log(`User ${user} logined`))
.on('message',      message => console.log(`Message: ${message}`))
.start()
}
启动了之后没有进⾏登陆操作,很奇怪,难道是因为
不是哦是可以直接⽤哦,可能是第⼀次使⽤,要⽤node.js下载什么配置⽂件?所以现在登录了。现在要不要拆分成两个启动项⽬?也即同⼀个项⽬,但是不同启动,这样⼦可以互不⼲扰?
看到⾥⾯的功能,恰好就有
很需要这个定时提醒功能,定时功能底层应该是schdule这个库实现的。
他的另⼀个库我发现就是合在⼀起写的,分开写的⽬的是什么呢?合起来的⽬的⼜是什么呢?
现在有个疑惑就是,假设拆分成两个项⽬,能不能公⽤哪些service层的代码?
终于明⽩了分开两个项⽬的⽬的,因为wechat是前端部分,koa是后端部分~~~
这个项⽬不要影响到本来的⽹站项⽬,要想办法共享资源,(⾼内聚低耦合?)反正就是不会造成⼀⽅完蛋了,另⼀⽅就运⾏不了的局⾯,⽽要想共⽤资源,它们的技术(?)应该是要⼀致的,编程风格应该要⼀致这就是我为什么执着要⽤egg.js来写的原因。
⼯具函数应该放在middleWare中。看了⼀下egg.js⽂档,middleWare是⽤来拦截http请求,处理消息的。那是否应该放在extend⽂件夹下?⼜浏览了⼀下,发现extend⽂件夹下只能放固定的⼏个⽂件,⽽且是⾃动合并到相关的变量(字段?)上去,不⽤显性require的。
感觉对egg不是很熟悉,算了,看看有没有前⼈栽树,github上转了⼀圈,发现还没有前⼈,尴尬。
发现egg.js⾥⾯有定时任务的配置,不需要另外配置schdule库,猜想应该是内置了。
疑问,怎么把这个项⽬融进去?
现在遇到个困难,class好像每⼀次调⽤都会造成this.data数值改变(js基础都忘了,尴尬)
那就只有弄⼀个全局变量存起来先。
github制作个人网站发现在extend⽂件夹下好像可以export⼀个变量,全局都可以调⽤。
现在已经把所有代码修改成class的形式了,现在有⼀个问题,就是('message',func)的时候,func⾥⾯this的绑定的问题,只要⽤上了()=>func()的时
候,func⾥⾯执⾏的this就不再指向wechaty了,这个很糟糕,换成function(msg){return func(msg,ctx)}也是不⾏,也就是说现在要解决this 的指向问题?如何在事件监听定义这⾥不改变this的指向?
解决办法就是把wechaty实例传过去。(hhhh)
现在怎么把两个库合在⼀起?⼀个是⽤户库⼀个是⽇程库⼀个是wechat
现在就是要把wechat⽤户的唯⼀id作为凭证?使⽤pad的⽅式登录,详情看
拆分成两个egg项⽬,这样⼦就不会两个都崩了。
有⼀个疑问,wechaty是怎么做到准确⽆误地把信息发给正在聊天的⼈的?
就是通过什么记录状态?socket?
现在呢,通过alias查联系⼈,并且
现在发现了⼀个问题,就是下⾯的问题:
疑问,怎么知道后台启动服务成功了?就是等待异步动作完成之后再响应?
只有异步才能解决异步,是时候看⼀下es6 promise的知识了。
-----------------还是先了解下wechaty这个模块有哪些api?是怎么做到登陆的?

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。