最近在做一个微信相关的项目。遇到一个情况是当用户关注我时候,需要存储用户信息(同样的需求会有很多,例如:用户预订一个产品,这个时候库存需要做相应变化。等等)。 用我们行内一句话就是:发布订阅。
如果代码直接写可能是这样的:
关注(){
//to do
createUser()
}
createUser(){
// todo
}
如果稍做重构,这两个方法可能不在同一个文件里面,需要引用一下。 即使这样,我感觉我们代码还是紧耦合。
所以我想到了 关注时候发布一个创建人的消息,让创建人的代码一直监听就行。如果有任何人发布消息,我自己去创建不就好了,什么代码做什么事。nodejs真是擅长做这种事情。
如果感觉陌生,看一下文档就这几个方法,真是简单啊。 https://nodejs.org/api/events.html
基本上是这样的:
emitter.listeners(event) 监听
emitter.emit(event[, arg1][, arg2][, ...]) 发布
以下是我的代码: 创建event_emitter.js. (统一管理所有的事件监听)
var person = require('../routes/a_person');
var events = require('events');
var emitter = new events.EventEmitter();
/*
创建用户事件监听
*/
emitter.on('create_person', person.createPerson); // person.createPerson 是业务代码,创建人的代码。
module.exports = emitter;
在需要微信关注的代码中发布事件。
var emitter = require('../routes/base_event');
emitter.emit('create_person',msg.fromUserName,function(){ });
ok,完成了。