详解nodejs微信公众号开发——3.封装消息响应模块
上一篇文章:nodejs微信公众号开发(2)自动回复,实现了简单的关注回复。采用拼接字符串的形式,并不是很方便,这里我们将其封装承接口。
1.ejs模板引擎
不使用拼接字符串的方式,那么模板引擎就是较好的选择。Nodejs开源模板的选择很多,程序中使用EJS,有ClassicASP/PHP/JSP的经验用起EJS来的确可以很自然,也就是说,你能够在<%...%>块中安排JavaScript代码,利用最传统的方式<%=输出变量%>(另外<%-输出变量是不会对&等符号进行转义的).
2.heredoc
在php、python中都有heredoc方式的字符串定义方法,JavaScript也实现了heredoc模块,主要解决大量字符串拼接问题。
新建模板文件tpl.js:
'usestrict'
varejs=require('ejs');
varheredoc=require('heredoc');
vartpl=heredoc(function(content){/*
]]>
]]>
<%=createTime%>
]]>
<%if(msgType==='text'){%>
]]>
<%}elseif(msgType==='image'){%>
]]>
<%}elseif(msgType==='voice'){%>
]]>
<%}%>elseif(msgType==='video'){%>
<%}%>elseif(msgType==='music'){%>
]]>
]]>
]]>
]]>
]]>
<%}%>elseif(msgType==='news'){%>
<%=content.length%>
<%content.forEach(function(item){%>
-
]]>
]]>
]]>
]]>
<%})%>
<%}%>
*/});
varcompiled=ejs.compiled(tpl);
exports=module.exports={
compiled:compiled
};
3.处理接收到的消息
修改generator.js中之前直接回复消息的那部分代码,我们将处理回复内容的逻辑交给业务层,等其处理完毕,继续执行下面的代码,封装消息内容成xml并回复出去。
varmessage=util.formatMessage(content.xml); this.weixin=message;//挂载消息 yieldhandler.call(this,next);//转到业务层逻辑 wechat.replay.call(this);//真正回复
4.业务层的处理逻辑
app.js里面中间件的使用方式修改为:
varweixin=require('./weixin');
...
app.use(wechat(config.wechat,weixin.reply));
weixin.reply即generator.js中的handler,我们将公众号业务成的逻辑都写在weixin.js里面,如回复消息、将来的爬取电影网站信息、支付等。
exports.reply=function*(next){
varmessage=this.weixin;
if(message.magType==='event'){
if(message.Event==='subscribe'){
if(message.EventKey)console.log('扫描二维码关注:'+message.EventKey+''+message.ticket);
this.body='终于等到你,还好我没放弃';
}elseif(message.Event==='unsubscribe'){
console.log(message.FromUserName+'悄悄地走了...');
}
}else{
//
}
yieldnext;
}
5.回复消息
我们在Wechat原型链上增加replay方法:
Wechat.prototype.replay=function(){
varcontent=this.body;
varmessage=this.weixin;
varxml=util.tpl(content,message);
this.status=200;
this.type='application/xml';
this.body=xml;
}
这样实现了wechat.replay.call(this);的回复消息功能。
6.总结
上面代码已经基本实现了消息的封装,回复规则和回复内容写在业务层代码weixin.js中,里面简单的实现了关注和取关的事件处理。
由于koa框架是基于ES6,里面充斥了大量的Promise、genarator、yield等内容,对ES6不了解的,可以学习一下此篇文章:ECMAScript6快速入手攻略
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。