【问题标题】:Access rest api using nodejs使用nodejs访问rest api
【发布时间】:2013-12-29 23:28:52
【问题描述】:

我正在尝试访问 opencorporates.com 并使用他们的 REST API。 我从How to make remote REST call inside Node.js? any CURL? 得到这个代码。但它没有获取任何数据。我在网址上尝试了 wget,它工作得非常好。

app.js

var https = require('http');

var optionsget = {
host : 'opencorporates.com', 

port : 8080,
path : '/v0.2/companies/search?q=barclays+bank&jurisdiction_code=gb', 
method : 'GET' 
};


console.info('Options prepared:');
console.info(optionsget);
console.info('Do the GET call');

var reqGET = https.get(optionsget, function(res) {
console.log("statusCode: ", res.statusCode);
console.log("headers: ", res.headers);


res.on('data', function(d) {
    console.info('GET result:\n');
    process.stdout.write(d);
    console.info('\n\nCall completed');
  });

});

reqGet.end();
reqGet.on('error', function(e) {
console.error(e);
});

【问题讨论】:

    标签: node.js api rest


    【解决方案1】:

    因为 Node 是异步运行的,所以返回的数据被分成了块。

    .on('data') 事件返回部分数据,然后您需要将其拼接/追加回变量。然后,您可以使用.on('end') 捕获完整的输出。

    查看此示例了解更多信息:Why is node.js breaking incoming data into chunks?(@vossad01 的回答)

    也就是说,@SilviuBurcea 建议使用 request 是一种更简单的处理 http 请求的方法,因此您不必自己编写和处理所有这些。

    【讨论】:

      【解决方案2】:

      这是功能齐全的版本供您参考:

      var http = require('http');
      
      var optionsget = {
          host : 'api.opencorporates.com',
          port : 80,
          path : '/v0.2/companies/search?q=barclays+bank&jurisdiction_code=gb',
          method : 'GET'
      };
      
      
      console.info('Options prepared:');
      console.info(optionsget);
      console.info('Do the GET call');
      
      var reqGet = http.get(optionsget, function(res) {
          console.log("statusCode: ", res.statusCode);
          console.log("headers: ", res.headers);
      
          buffer='';
      
          res.on('data', function(d) {
              //console.info('GET result:\n');
              //process.stdout.write(d);
              buffer += d.toString();
              //console.info('\n\nCall completed');
          });
      
          res.on('end', function() {
              console.info('GET result:\n');
              console.log(buffer);
              console.info('\n\nCall completed');
          });
      
      });
      reqGet.on('error', function(e) {
          console.error(e);
      });
      
      reqGet.end();
      

      【讨论】:

        【解决方案3】:

        尝试在本地运行代码,首先出现大小写错误

        var reqGET = https.get(optionsget, function(res) {
        
        reqGet.end();
        

        第二,网址在地址上不起作用,也不安全

        var optionsget = {
        host : 'api.opencorporates.com', 
        port : 80,
        path : '/v0.2/companies/search?q=barclays+bank&jurisdiction_code=gb', 
        method : 'GET' 
        };
        

        值得注意的是,如果你想实际使用 https,你需要更改 require 行

        var https = require('https');
        

        【讨论】:

        【解决方案4】:

        尝试使用请求模块。 https://github.com/mikeal/request这是类固醇上的http模块。

        【讨论】:

        • 非常感谢您提供的链接。但是这段代码到底有什么问题呢?
        • 它的级别非常低,您没有 onEnd 处理程序并且您有一些拼写错误。 Request 非常强大,并且利用了这些低级调用。
        • 说到类固醇,你听说过github.com/simov/purest 它建立在 request 之上,专为 REST API 设计
        猜你喜欢
        • 1970-01-01
        • 2016-06-26
        • 2019-05-17
        • 1970-01-01
        • 1970-01-01
        • 2020-07-30
        • 1970-01-01
        • 1970-01-01
        • 2020-04-28
        相关资源
        最近更新 更多