详解nodejs微信公众号开发,3。封装消息响应模块

  

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

  

<强> 1。ejs模板引擎
  

  

不使用拼接字符串的方式,那么模板引擎就是较好的选择.Nodejs开源模板的选择很多,程序中使用<代码> EJS> 经典ASP/PHP/JSP代码的经验用起<代码> EJS> & lt; %…%比;> & lt; %=输出变量%祝辞>   

  

<强> 2。heredoc
  

  

在php, python中都有heredoc方式的字符串定义方法,JavaScript也实现了heredoc模块,主要解决大量字符串拼接问题。
  新建模板文件<代码> tpl.js :

        使用严格的      var ejs=要求(“ejs”);   var heredoc=要求(“heredoc”);      var tpl=heredoc(函数(内容){/*   & lt; xml>   & lt; ToUserName> & lt; ! [CDATA [& lt; %=toUserName %祝辞]]祝辞& lt;/ToUserName>   & lt; FromUserName> & lt; ! [CDATA [& lt; %=fromUserName %祝辞]]祝辞& lt;/FromUserName>   & lt; CreateTime> & lt; %=createTime %祝辞& lt;/CreateTime>   & lt; MsgType> & lt; ! [CDATA [& lt; %=msgType %祝辞]]祝辞& lt;/MsgType>   & lt; %如果(msgType==='文本'){%比;   & lt; Content> & lt; ! [CDATA [& lt;内容%=%祝辞]]祝辞& lt;/Content>   & lt; %} else if (msgType==='图像'){%比;   & lt; Image>   & lt; MediaId> & lt; ! [CDATA [& lt; %=内容。mediaId %祝辞]]祝辞& lt;/MediaId>   & lt;/Image>   & lt; %} else if (msgType==='声音'){%比;   & lt; Voice>   & lt; MediaId> & lt; ! [CDATA [& lt; %=内容。mediaId %祝辞]]祝辞& lt;/MediaId>   & lt;/Voice>   & lt; %} %比;else if (msgType==='视频'){%比;   & lt; Video>   & lt; MediaId> & lt; ! [CDATA [& lt; %=内容。mediaId %祝辞]]祝辞& lt;/MediaId>   & lt; Title> & lt; ! [CDATA [& lt; %=内容。标题%祝辞]]祝辞& lt;/Title>   & lt; Description> & lt; ! [CDATA [& lt; %=content.description %祝辞]]祝辞& lt;/Description>   & lt;/Video>   & lt; %} %比;else if (msgType==='音乐'){%比;   & lt; Music>   & lt; Title> & lt; ! [CDATA [& lt; %=内容。标题%祝辞]]祝辞& lt;/Title>   & lt; Description> & lt; ! [CDATA [& lt; %=content.description %祝辞]]祝辞& lt;/Description>   & lt; MusicUrl> & lt; ! [CDATA [& lt; %=内容。musicUrl %祝辞]]祝辞& lt;/MusicUrl>   & lt; HQMusicUrl> & lt; ! [CDATA [& lt; %=内容。hqMusicUrl %祝辞]]祝辞& lt;/HQMusicUrl>   & lt; ThumbMediaId> & lt; ! [CDATA [& lt; %=内容。thumbMediaId %祝辞]]祝辞& lt;/ThumbMediaId>   & lt;/Music>   & lt; %} %比;else if (msgType==='新闻'){%比;   & lt; ArticleCount> & lt; %=内容。长度%祝辞& lt;/ArticleCount>   & lt; Articles>   & lt; % content.forEach(函数(项){%比;   & lt; item>   & lt; Title> & lt; ! [CDATA [& lt; %=项目。标题%祝辞]]祝辞& lt;/Title>   & lt; Description> & lt; ! [CDATA [& lt; %=item.description %祝辞]]祝辞& lt;/Description>   & lt; PicUrl> & lt; ! [CDATA [& lt; %=项目。picUrl %祝辞]]祝辞& lt;/PicUrl>   & lt; Url> & lt; ! [CDATA [& lt; %=项目。%在url]]祝辞& lt;/Url>   & lt;/item>   & lt; %}) %比;   & lt;/Articles>   & lt; %} %比;   & lt;/xml>   */});      var=ejs.compiled编译(tpl);      出口=模块。出口={   编译:编译   };      之前      

<强> 3。处理接收到的消息
  

  

修改<代码> generator.js>         var消息=util.formatMessage (xml);      这一点。weixin=消息;//挂载消息      收益率handler.call(下);//转到业务层逻辑      wechat.replay.call(这个);//真正回复      之前      

<>强4。业务层的处理逻辑

  

<代码> app.js>         var weixin=要求('/weixin。');   …   app.use(微信(config.wechat weixin.reply));之前      

<代码> weixin.reply> generator.js> 处理程序> weixin.js> 详解nodejs微信公众号开发,3。封装消息响应模块