Node.js - "数据"对于某些请求,事件并不总是触发

时间:2014-07-30 23:11:08

标签: node.js fiddler

我正在使用Node.js实现IFTTT操作。 Node.js是在Windows Server 2012 R2上运行的版本0.10.29。

我正在尝试阅读来自IFTTT的POST正文。 “数据”事件未触发。只有'可读'事件才会被触发。没有其他事件如'结束'被解雇。

但是,如果我使用curl从另一台服务器模拟相同的POST请求,则此代码效果很好。

另外,如果我在IFTTT和我的Node.js之间将Fiddler放在我的服务器上,它的效果很好。

来自IFTTT的请求在Fiddler中看起来很棒,当Fiddler以某种方式“处理”它时,Node.js代码可以读取它。

可能是什么问题?

var s = http.createServer(process_request);
s.listen(8080);

function process_request(req, res) {

req.parsed_url = url.parse(req.url, true);
var core_url = req.parsed_url.pathname;

if (core_url == '/ifttt/v1/status' && req.method.toLowerCase() == 'get') {
    // do stuff required for their test
}
else if (core_url == '/ifttt/v1/test/setup' && req.method.toLowerCase() == 'post') {
    // do stuff required for their test
}
else if (core_url == '/ifttt/v1/actions/my_action' && req.method.toLowerCase() == 'post') {

    if (<the channel key matches>) {

        var json_body = "";

        req.on('readable',function ()     { console.log("In callback for readable ");});
        req.on('end',     function (data) { console.log("In callback for end:  " + json_body); });
        req.on('close',      function (data) { console.log("In callback for close ");});
        req.on('error',      function (data) { console.log("In callback for error "); });

        req.on('data',
            function (chunkdata) {
                console.log("In callback for data ");

                if (chunkdata) {
                    if (typeof chunkdata == 'string') { json_body += chunkdata; } 
                   else { console.log("data: No chunkdata "); }
                }
            };
        )
    } 
} // action url

} // function process_request

1 个答案:

答案 0 :(得分:0)

更新:我使用Express重写了这段代码,问题没有重新出现。