【问题标题】:HTTP Request in Node.js not working? [duplicate]Node.js 中的 HTTP 请求不起作用? [复制]
【发布时间】:2016-05-08 01:34:04
【问题描述】:

我正在尝试创建一个 HTTP 请求函数。所有请求都到同一个域的同一个目录,只是文件名不同。

控制台中没有出现任何内容,也没有返回任何内容。

function HttpRequest(filename){

    var options = {
        host: "example.com",
        port: 80,
        path: "/path/to/file/" + filename,
        method: "GET",
    };

    var Response = "";
    var StatusCode = 0;

    var req = http.request(options, function(resp){
        resp.on('data', function(data){
            Response = data;
            StatusCode = resp.statusCode;
        });
    });

    req.on('error',function(e){
        console.log("Request to '" + filename + "' failed: " + e.message)
    });

    req.write('data\n');
    req.write('data\n');
    req.end();

    return Response;
}

【问题讨论】:

标签: javascript node.js


【解决方案1】:

您遇到此问题是因为 http.request 函数本质上是异步的 - 您不知道它何时会返回,如果有的话。

此代码块将为正确的变量分配正确的值(不过,您可能会在此处遇到范围问题):

var req = http.request(options, function(resp){
        resp.on('data', function(data){
            Response = data;
            StatusCode = resp.statusCode;
        });
    });

但您永远不知道何时将Response 设置为data。当您编写 return Response 时,您实际上是在函数完成执行后立即返回 Response 的值 - 但这并不意味着 HTTP 请求已完成或回调已被执行。

正如@Jonathan Lonowski 在评论中提到的那样,answer 是您尝试解决问题的方式。

本质上,您需要使用作为参数提供给函数的回调。

function HttpRequest(filename, callback){

    var options = {
        host: "example.com",
        port: 80,
        path: "/path/to/file/" + filename,
        method: "GET",
    };

    var req = http.request(options, function(resp){
        resp.on('data', callback);
    });

    req.on('error',function(e){
        console.log("Request to '" + filename + "' failed: " + e.message)
    });

    req.write('data\n');
    req.write('data\n');
    req.end();
}

然后,在调用你的函数时:

HttpRequest("myfile", function(data) {
    console.log(data);
});

【讨论】:

    猜你喜欢
    • 2018-04-24
    • 1970-01-01
    • 2015-10-17
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多