nodejs 위 챗 공중 번호 개발-3.패 키 징 메시지 응답 모듈

5997 단어 NodeJs작은 편지
이전 글:nodejs 위 챗 공중 번호 개발(2)자동 답장간단 한 관심 회복 을 실현 했다.문자열 을 맞 추 는 형식 을 사용 하 는 것 은 결코 편리 하지 않 습 니 다.여기 서 우 리 는 그것 을 인 터 페 이 스 를 봉인 합 니 다.
1.ejs 템 플 릿 엔진
문자열 을 맞 추 는 방식 을 사용 하지 않 으 면 템 플 릿 엔진 이 좋 은 선택 입 니 다.Nodejs 오픈 소스 템 플 릿 의 선택 이 많 습 니 다.프로그램 에서 사용EJS하고Classic ASP/PHP/JSP경험 이 있 습 니 다.EJS를 사용 하면 자 연 스 럽 습 니 다.즉,<%...%> 블록 에 자 바스 크 립 트 코드 를 배치 하고 가장 전통 적 인 방식<%= %>(또한<%-출력 변 수 는&등 기 호 를 바 꾸 지 않 습 니 다).
2. heredoc
php,python 에는 heredoc 방식 의 문자열 정의 방법 이 있 고 자바 스 크 립 트 도 heredoc 모듈 을 실현 하여 대량의 문자열 연결 문 제 를 해결 합 니 다.
새 템 플 릿 파일tpl.js:

'use strict'

var ejs = require('ejs');
var heredoc = require('heredoc');

var tpl = heredoc(function(content){/*
  <xml>
    <ToUserName><![CDATA[<%= toUserName %>]]></ToUserName>
    <FromUserName><![CDATA[<%= fromUserName %>]]></FromUserName>
    <CreateTime><%= createTime%></CreateTime>
    <MsgType><![CDATA[<%= msgType %>]]></MsgType>
    <% if(msgType ==='text') { %>
      <Content><![CDATA[<%= content %>]]></Content>
    <% }else if(msgType ==='image'){ %>
      <Image>
        <MediaId><![CDATA[<%= content.mediaId %>]]></MediaId>
      </Image>
    <% }else if(msgType ==='voice'){ %>
      <Voice>
        <MediaId><![CDATA[<%= content.mediaId %>]]></MediaId>
      </Voice>
    <% } %>else if(msgType ==='video'){ %>
      <Video>
        <MediaId><![CDATA[<%= content.mediaId %>]]></MediaId>
        <Title><![CDATA[<%= content.title %>]]></Title>
        <Description><![CDATA[<%= content.description %>]]></Description>
      </Video>   
    <% } %>else if(msgType ==='music'){ %>
      <Music>
        <Title><![CDATA[<%= content.title %>]]></Title>
        <Description><![CDATA[<%= content.description %>]]></Description>
        <MusicUrl><![CDATA[<%= content.musicUrl %>]]></MusicUrl>
        <HQMusicUrl><![CDATA[<%= content.hqMusicUrl %>]]></HQMusicUrl>
        <ThumbMediaId><![CDATA[<%= content.thumbMediaId %>]]></ThumbMediaId>  
      </Music>
    <% } %>else if(msgType ==='news'){ %>
      <ArticleCount><%= content.length %></ArticleCount>
      <Articles>
        <% content.forEach(function(item){ %>
        <item>
          <Title><![CDATA[<%= item.title %>]]></Title> 
          <Description><![CDATA[<%= item.description %>]]></Description>
          <PicUrl><![CDATA[<%= item.picUrl %>]]></PicUrl>
          <Url><![CDATA[<%= item.url %>]]></Url>
        </item>
        <% }) %>
      </Articles>
    <% } %>  
  </xml>
*/});

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.replygenerator.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에 대해 잘 모 르 는 것 이 므 로 이 글 을 배 울 수 있 습 니 다.ECMAScript 6 빠 른 공략
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기