Javascript nodejs http.request如何收集数据

Javascript nodejs http.request如何收集数据,javascript,node.js,http,callback,http-get,Javascript,Node.js,Http,Callback,Http Get,我试图在一个方法中调用一个RESTAPI URL,然后使用该响应形成下一个对另一个URL的查询,比如git来查询一些信息。 在发布这篇文章之前,我已经看到了很多例子,在每个人身上,人们只是简单地将响应打印到控制台或将其设置为服务器响应 我尝试过使用async/await,但它只会让整个过程变得非常缓慢。因此,我并不热衷于使用这种方法 我正在进行回调,但我无法收集数据来实际循环它。 以下是我的代码片段:- function initialize(path) { // Setting URL

我试图在一个方法中调用一个RESTAPI URL,然后使用该响应形成下一个对另一个URL的查询,比如git来查询一些信息。 在发布这篇文章之前,我已经看到了很多例子,在每个人身上,人们只是简单地将响应打印到控制台或将其设置为服务器响应

我尝试过使用async/await,但它只会让整个过程变得非常缓慢。因此,我并不热衷于使用这种方法

我正在进行回调,但我无法收集数据来实际循环它。 以下是我的代码片段:-

function initialize(path) {
    // Setting URL and headers for request
    var options = {
        url: '',
        headers: {
            'Accept': '*/*',
            'User-Agent' : 'something something',
            'Authorization': 'Basic ' + new Buffer(process.env.username + ':' + process.env.password).toString('base64')
         },
         method: 'GET',
         port:443
    };
    options.url =  path;
    callback = function(err,response){
        var str= "";
        response.on('data',function(chunk){
            str+=chunk;
        });
        response.on('end',function(){
            return JSON.parse(str);
        });
    }
    http.request(options, callback).end();
}
我从这个方法中调用它

function collectData1(userid){
    var url = "example.com/users/user1";
    var results = initialize(url);
    console.log(results);
    return results;
}
但结果总是不确定的


那么,我该怎么做呢?有什么建议吗?

我有三种建议

  • (你已经试过了)
  • (这是最古老的方法。实际上我不建议这样:))
  • 否则,不能直接从异步函数返回值

    编辑:


    我可以提出三种方法

  • (你已经试过了)
  • (这是最古老的方法。实际上我不建议这样:))
  • 否则,不能直接从异步函数返回值

    编辑:

    修改了代码
    在请求中添加response.setEncoding('utf8')
    http请求在端口80中,https请求在端口443中
    提及

    修改了代码
    在请求中添加response.setEncoding('utf8')
    http请求在端口80中,https请求在端口443中

    请参阅

    是否触发了回调函数?现在开始获取此信息<代码>events.js:136抛出器;//未处理的“error”事件^error:connect econnrefered127.0.0.1:80 at Object.\u errnoException(util.js:1031:13)at exceptionWithHostPort(util.js:1052:20)at TCPConnectWrap.afterConnect[as oncomplete](net.js:1195:14)解决了端口问题。我想我要找的是http.request或request.get的一个好例子。我没有找到一个好的例子,结果不会直接返回到html或html模板,而不对数据本身做任何事情。回调函数被触发了吗?现在开始了解这个<代码>events.js:136抛出器;//未处理的“error”事件^error:connect econnrefered127.0.0.1:80 at Object.\u errnoException(util.js:1031:13)at exceptionWithHostPort(util.js:1052:20)at TCPConnectWrap.afterConnect[as oncomplete](net.js:1195:14)解决了端口问题。我想我要找的是http.request或request.get的一个好例子。我还没有找到一个好的例子,结果不能直接返回html或html模板,而不对数据本身做任何事情。你能在这里发布一些示例代码吗?回调
    .then()
    没有及时返回值供我处理。我一直没有定义,所以我不得不把wait放在任何地方。所以,这是我不想做的,无论我从promise得到什么,我不想把它发送到我的显示器上,我需要处理它,(过滤掉一些值,或者用这个响应来提出我的下一个请求)。您将如何做到这一点?如何在没有异步/等待的情况下使用承诺。你能在这里发布一些示例代码吗?回调
    .then()
    没有及时返回值供我处理。我一直没有定义,所以我不得不把wait放在任何地方。所以,这是我不想做的,无论我从promise得到什么,我不想把它发送到我的显示器上,我需要处理它,(过滤掉一些值,或者用这个响应来提出我的下一个请求)。你会怎么做?使用你建议的代码,我得到了这个错误
    TypeError[ERR\u INVALID\u ARG\u TYPE]:“chunk”参数必须是string或Buffer类型之一。已接收类型对象
    请检查此代码。我已经测试了自己,正在使用您建议的代码,我得到了这个错误
    TypeError[ERR\u INVALID\u ARG\u TYPE]:“chunk”参数必须是string或Buffer类型之一。已接收类型对象
    请检查此代码。我已经测试了自己,正在工作
    var http = require('http');
    
    function initialize(path) {
        return new Promise(function (resolve, reject) {
    
            // Setting URL and headers for request
            var options = {
                hostname: "jsonplaceholder.typicode.com",
                path: path,
                // port:443,
                headers: {
                    'Accept': '*/*',
                    'User-Agent': 'something something',
                    'Authorization': 'Basic ' + new Buffer(process.env.username + ':' + process.env.password).toString('base64')
                },
                method: 'GET',
    
            };
    
            var callback = function (response) {
    
    
                var str = "";
                response.on('data', function (chunk) {
                    str += chunk;
                });
    
                response.on('end', function () {
                    resolve(str);
                });
    
                request.on("error", function (error) {
                    reject(error);
                })
            };
    
            var request = http.request(options, callback)
            request.on("error", function (error) {
                reject(error);
            });
    
            request.end();
        })
    }
    
    function collectData(userid) {
        var url = "/posts/" + userid;
        return initialize(url);
    }
    
    
    http.createServer(function (req, res) {
    
    
        collectData(1).then(function (data) {
            res.write(data);
            res.end();
    
        }).catch(function (error) {
    
            res.write(error.message);
            res.end();
        })
    
    
    }).listen(8080);
    
    function initialize(path, callback) {
    // Setting URL and headers for request
    var options = {
        host: "example.com"
        path: "/users/user1",
        headers: {
            'Accept': '*/*',
            'User-Agent': 'something something',
            'Authorization': 'Basic ' + new Buffer(process.env.username + ':' + process.env.password).toString('base64')
        },
        method: 'GET',
        port: 80
    };
    
    http.request(options, function (response) {
        response.setEncoding('utf8');
        var str = "";
        response.on('data', function (chunk) {
            str += chunk;
        });
        response.on('end', function () {
            callback(JSON.parse(str));
        });
    }).end();
    }
    
    function collectData1(userid) {
        var url = "example.com/users/user1";
        initialize(url, function (result) {
            console.log(results);
            return results;
        });
    }