我正在使用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
答案 0 :(得分:0)
更新:我使用Express重写了这段代码,问题没有重新出现。