上一篇文章:nodejs微信公众号开发(2)自动回复,实现了简单的关注回复。采用拼接字符串的形式,并不是很方便,这里我们将其封装承接口。

公司主营业务:成都网站制作、成都网站建设、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。成都创新互联公司是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。成都创新互联公司推出大洼免费做网站回馈大家。
1. ejs模板引擎
不使用拼接字符串的方式,那么模板引擎就是较好的选择。Nodejs开源模板的选择很多,程序中使用 EJS,有Classic ASP/PHP/JSP的经验用起EJS来的确可以很自然,也就是说,你能够在 <%...%> 块中安排 JavaScript 代码,利用最传统的方式 <%=输出变量%>(另外 <%-输出变量是不会对 & 等符号进行转义的).
2. heredoc
在php、python中都有heredoc方式的字符串定义方法,JavaScript也实现了heredoc模块,主要解决大量字符串拼接问题。
新建模板文件tpl.js:
'use strict'
var ejs = require('ejs');
var heredoc = require('heredoc');
var tpl = heredoc(function(content){/*
]]>
]]>
<%= createTime%>
]]>
<% if(msgType ==='text') { %>
]]>
<% }else if(msgType ==='image'){ %>
]]>
<% }else if(msgType ==='voice'){ %>
]]>
<% } %>else if(msgType ==='video'){ %>
<% } %>else if(msgType ==='music'){ %>
]]>
]]>
]]>
]]>
]]>
<% } %>else if(msgType ==='news'){ %>
<%= content.length %>
<% content.forEach(function(item){ %>
-
]]>
]]>
]]>
]]>
<% }) %>
<% } %>
*/});
var compiled = ejs.compiled(tpl);
exports = module.exports = {
compiled:compiled
};
3. 处理接收到的消息
修改generator.js中之前直接回复消息的那部分代码,我们将处理回复内容的逻辑交给业务层,等其处理完毕,继续执行下面的代码,封装消息内容成xml并回复出去。
var message = util.formatMessage(content.xml);
this.weixin = message; //挂载消息
yield handler.call(this,next); //转到业务层逻辑
wechat.replay.call(this); //真正回复
4.业务层的处理逻辑
app.js里面中间件的使用方式修改为:
var weixin = require('./weixin');
...
app.use(wechat(config.wechat,weixin.reply)); weixin.reply即generator.js中的handler,我们将公众号业务成的逻辑都写在weixin.js里面,如回复消息、将来的爬取电影网站信息、支付等。
exports.reply = function* (next){
var message = this.weixin;
if(message.magType === 'event'){
if(message.Event === 'subscribe'){
if(message.EventKey) console.log('扫描二维码关注:'+message.EventKey+' '+message.ticket);
this.body = '终于等到你,还好我没放弃';
}else if(message.Event === 'unsubscribe'){
console.log(message.FromUserName +' 悄悄地走了...');
}
}else{
//
}
yield next;
}
5.回复消息
我们在Wechat原型链上增加replay方法:
Wechat.prototype.replay = function(){
var content = this.body;
var message = this.weixin;
var xml = 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快速入手攻略
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持创新互联。
Copyright © 2009-2022 www.fjjierui.cn 青羊区广皓图文设计工作室(个体工商户)达州站 版权所有 蜀ICP备19037934号