关于Node开发微信公众号微信回复代码的疑问,求解答!
var parseString = require('xml2js').parseString;
WeChat.prototype.autoMsg = function(req, res, next) {
var buffer = [],
that = this;
req.on('data',function(data){
buffer.push(data);
});
req.on('end',function(){
var msgXml = Buffer.concat(buffer).toString('utf-8');
parseString(msgXml,{explicitArray : false},function(err,result){
// 如果有错误直接抛出
if(err) throw err;
result = result.xml;
var toUser = result.ToUserName;
var fromUser = result.FromUserName;
// 判断消息类型
if(result.MsgType === "event") {
// 关注微信公众号
if(result.Event === "subscribe") {
var resultXml = "<xml><ToUserName><![CDATA["+ fromUser +"]]></ToUserName>";
resultXml += "<FromUserName><![CDATA["+ toUser +"]]></FromUserName>";
resultXml += "<CreateTime>"+ new Date().getTime() +"</CreateTime>";
resultXml += "<MsgType><![CDATA[text]]></MsgType>";
resultXml += "<Content><![CDATA[欢迎关注,哈哈哈哈哈!]]></Content></xml>";
res.send(resultXml);
}
}else {
}
})
})
以上是Node开发微信公众号-微信回复的部分代码
针对以上代码,我有如下不明
req.on('data',function(data){ ... }
req.on('end',function(){ ... }
其中.on
我理解是绑定一个事件,data
和end
分别为事件名,第二个参数为此事件的回调函数
但是我没有理解,既然有这两个事件,是在哪里触发的data
和end
两个事件呢?
还望得到解答,谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
node中常用监听事件
.on('connection') 连接成功调用的事件
.on('error') 发生错误调用的事件
.on('close') 当 server 关闭的时候触发。注意,如果有连接存在,直到所有的连接结束才会触发这个事件
.on('data') 当接收到数据的时触发该事件。data 参数是一个 Buffer 或 String。数据编码由 socket.setEncoding() 设置。注意当 Socket 发送 data 事件的时候,如果没有监听者数据将会丢失。
.on('listening') 当服务被绑定后调用 server.listen()。
.on('end') 当 socket 的另一端发送一个 FIN 包的时候触发,从而结束 socket 的可读端。
http 请求中触发的。