设计一个REST api,它将使用Nodejs从多个api中获取结果

时间:2017-12-05 22:28:49

标签: node.js rest

我试图设计一个REST API,它将从多个apis中抛出一个聚合响应。

以下是我尝试执行的NodeJS代码 -

Pseudo Code start
//endpoint to be called from a browser / REST client 

router.get('/api/v1/getItems', (req, response, next) => {

var result = {} // hold the aggregated response from multiple apis
    //internally fire another endpoint & add the response over to the var result
 http.get(endpoint 1, function(resp){
 add response to result})
 http.get(endpoint 2, function(resp){
 add response to result
})
return response.json(result);
}

Pseudo Code end


// endpoint to be called from the browser or REST Client.
router.get('/api/v1/getItems', (req, response, next) => {
  var results = {};

// Nested Endpoint 1
  var optionsgetmsg = {
    host : 'host.domain.com', // tthe domain name
    port : 9043,
    path : '/services/itemdata', // the rest of the url
    method : 'GET' // do GET
};

//child endpoint
  var reqGet = http.request(optionsgetmsg, function(res) {

    res.on('data', function(d) {

        console.log("d "+ d); // child response
        results.itemdata = d;
        return response.send(results);
        //process.stdout.write(d);

    });

    res.on('end', function(d){

    })


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

上述情况的结果应该是输出'd'。输出“d”是来自子端点的响应。

我得到的实际结果是一个空对象。 {}

1 个答案:

答案 0 :(得分:0)

如果要发送JSON,则必须正确设置标头和响应:

 //child endpoint
var reqGet = http.request(optionsgetmsg, function(res) {

res.on('data', function(d) {
    res.setHeader('Content-Type', 'application/json');
    var results = d;
    response.send(JSON.stringify(results));

});

目前尚不清楚你究竟要求的是什么。