2017-07-10 9 views
0

私は非常に単純なタスクをやりたいのですが、まだ私は立ち往生しています!node.jsで別のHTTP GETをネストすることはできません

シナリオは、このようなものです:私のAPIにGET要求の後

、私はいくつかの外部サイトからhttp.getしたい、その後、元のAPIリクエストに、この外部サイトからの応答を送り返します。

明らかに、呼び出しは非同期なので、loremParagraphという文字列は正しく読み込まれずにapiに返されます。

エラー:エラー:送信後にヘッダーを設定できません。ここで

は私のコードです:

module.exports = function(app, express) { 

var myLoremRouter = express.Router(); 

var loremParagraph = ''; 
//HTTP GET accessed at localhost:8081/mylorem 
myLoremRouter.get('/', function(req, res) { 

    // Fetch one paragpraphlorem ipsum text from http://www.faux-texte.com/text-random-1.htm 
    http.get("http://www.faux-texte.com/text-random-1.html", function(resp) { 
      resp.on('data', function(chunk) { 
       // console.log('BODY: ' + chunk); 
       var $ = cheerio.load(chunk); 
       loremParagraph = $('div.Texte').text(); 
       console.log(loremParagraph); 
       // console.log(resp.status); 

      }); 

     }) 
     // If any error has occured, log error to console 
     .on('error', function(e) { 
      console.log("Got error: " + e.message); 
     }); 

    //Finally send the result back to the api call 
    res.json({ message: loremParagraph }); 
}); 

return myLoremRouter; 

};

+0

あなたは '二回res.json'呼んでいます。それがあなたにエラーを与えるものです。応答が送信されると、それを変更することはできません。 – Aron

+0

[非同期呼び出しからの応答を返すにはどうすればよいですか?](https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) –

答えて

0

これを試してください。ここでは、完全なデータを使用する準備ができるまでチャンクが追加されます。

https://stackoverflow.com/a/21953201/6219247

myLoremRouter.get('/', function(req, res) { 
    var body = ''; 
    http.get({ 
     host: 'www.faux-texte.com', 
     port: 80, 
     path: '/text-random-1.html' 
    }, function(resp) { 
     resp.on('data', function(chunk) { 
      body += chunk; 
     }); 
     resp.on('end', function(chunk) { 
      var $ = cheerio.load(body); 
      loremParagraph = $('div.Texte').text(); 
      res.json({ message: loremParagraph }); 
     }); 
    }) 
    .on('error', function(e) { 
     // handle/send error 
     res.send(/*...*/); 
    }); 
}); 
+1

うん、それはthats!非常にありがとう、私の問題を解決:) – Tasos

関連する問題