使用nodejs访问rest api

时间:2013-12-11 19:43:48

标签: node.js api rest

我正在尝试访问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);
});

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

由于Node以异步方式运行,因此返回的数据将分解为块。

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

有关详细信息,请参阅此示例:Why is node.js breaking incoming data into chunks?(@ vossad01的回答)

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

答案 2 :(得分:1)

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

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,则需要更改需求行

var https = require('https');

答案 3 :(得分:0)

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

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();