关于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我理解是绑定一个事件,dataend分别为事件名,第二个参数为此事件的回调函数
但是我没有理解,既然有这两个事件,是在哪里触发的dataend两个事件呢?
还望得到解答,谢谢!

阅读 3k
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 请求中触发的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题