使用localhost上的nodejs进行REST API调用

时间:2018-02-23 06:11:47

标签: r node.js rest api

我使用R语言制作了一个REST API。

#* @get /mean
normalMean <- function(samples=10){
  data <- rnorm(samples)
  mean(data)
}

我启动了R服务器并使用url- http://localhost:8000/mean对API进行了测试,但它正在运行。

但是当我尝试使用nodejs调用API时,它会返回错误:

Error: socket hang up
at TLSSocket.onHangUp (_tls_wrap.js:1124:19)
at TLSSocket.g (events.js:292:16)
at emitNone (events.js:91:20)
at TLSSocket.emit (events.js:185:7)
at endReadableNT (_stream_readable.js:974:12)
at _combinedTickCallback (internal/process/next_tick.js:80:11)

这是nodejs代码:

var https = require('https');
var optionsget = {
host : 'localhost', // here only the domain name
// (no http/https !)
port : 8000,
path : '/mean', // the rest of the url with parameters if needed
method : 'GET' // do GET
};

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

var reqGet = https.request(optionsget, function(res) {
console.log("statusCode: ", res.statusCode);
// uncomment it for header details
//  console.log("headers: ", res.headers);


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

});

我不明白我哪里出错了。我打算在此之后以类似的方式提出看跌请求。

1 个答案:

答案 0 :(得分:0)

这意味着套接字在超时期限内不会发送连接end事件。如果您通过http.request(而不是http.get)收到请求。您必须致电request.end()完成发送请求。

https.get('http://localhost:8000/mean', (resp) => {
console.log("statusCode: ", res.statusCode);

    let result = 0;

    // on succ
    resp.on('data', (d) => {
        result = d;
    });

    // on end
    resp.on('end', () => {
        console.log(result);
    });

}).on("error", (err) => {
    console.log("Error: " + err.message);
});