nodejs 위 챗 공중 번호 개발-3.패 키 징 메시지 응답 모듈
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.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
에 대해 잘 모 르 는 것 이 므 로 이 글 을 배 울 수 있 습 니 다.ECMAScript 6 빠 른 공략이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
콩짜개 검색 - 위 챗 공공 플랫폼 접속 (wechatpy)위의 글 은 위 챗 공공 플랫폼 을 어떻게 연결 하 는 지 소 개 했 지만 그 안의 검증 코드 는 우리 가 스스로 실현 한 것 이다.그러나 지금 우 리 는 더 좋 은 선택 이 생 겼 다.위 챗 (WeChat) 퍼 블...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.