javascript - node.js 中的异步 https 请求

标签 javascript node.js https

我有一个应用程序可以向第 3 方服务发出 https 请求以执行日志记录。出于某种原因,我几个小时前注意到第 3 方拒绝连接。不过那是另一个话题。

我在我的 node.js 应用程序中注意到,尽管请求是动态创建的,因此不应该挂起整个应用程序,但它们确实是。

进程重启后,https 请求挂起,然后因连接被拒绝错误而终止。示例代码如下。

var logger = function(data){

    var req = https.request({
        host: 'logs.loggly.com',
        port: 443,
        path: '/inputs/<my real key is here, removed obviously>',
        method: 'POST',
        headers:{
            'content-type': 'application/json'
        }
    }, function(res){
        var body = [];
        res.on('chunk', function(data){
            body.push(data);
        });
        res.on('end', function(){
            console.log(body.join(''));
        })
    });
    req.write(JSON.stringify(data));
    req.end();

}

这就是简单地调用:

logger({ 'test': 'datafoo' });

所以我很好奇为什么来自这个出站 https 请求的连接被拒绝/超时应该挂起然后崩溃整个应用程序。

谢谢!

最佳答案

程序挂起并且不打印任何内容,因为它没有捕获数据,并且除了使用 [].join('') 打印一个空字符串之外,您没有告诉进程执行任何操作。如果没有关于 IO 绑定(bind)任务的明确说明,Node.js 不会返回。你需要在res.on("end", [handler]);的handler中传入并执行一个回调函数,或者调用process.exit(); >,例如:

res.on("end", function() {
    console.log(body.join(''));
    process.exit();
});

res.on("chunk", [handler]); 不是标准的 HTTPS 事件。您可能想要像 res.on("data", function(chunk) { body.push(chunk); }); 这样的东西。

关于javascript - node.js 中的异步 https 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9425995/

相关文章:

node.js 并表达将 sqlite 数据传递给我的一个 View

php - 如何创建可编辑的下拉列表?使用 AJAX

javascript - player.mute() 在 YouTube API 中无法使用播放列表

javascript - 新建时使用可变参数

node.js - 如何同步处理 api 请求,每个请求等待几秒钟

node.js - 如何解决 amqplib Channel#consume 奇怪的签名?

java - "status":400, "error": "Bad Request", "message": "Required Date parameter ' 结束 ' is not present"

c# - 使用 wsdl.exe 从 c# 客户端到 Tomcat 的 HTTPS 连接

javascript - CORS 重定向工作意外

javascript - 如何处理 AngularJS 中的加载?