2017-01-20 94 views
0

我試圖通過請求答覆發送請求,但不能,有人可以幫助我嗎?Nodejs在發送請求後獲取請求後返回數據

var app = require('express')(); 
var http = require('http').Server(app); 
var bodyParser = require('body-parser'); 
var request = require('request'); 

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: true })); 

http.listen(9999, function() { 
    console.log('listening...'); 
}); 

app.post('/bot',function(req,res){ 
    var apiurl = 'https://apiURI' 
    request(apiurl, function(error,response,body){ 
    res.send(body) 
    }) 
} 

當我收到的API答案應該發送給客戶,誰做與res.send POST請求

error: Can't set headers after they are sent. 
+1

我猜這實際上是在你沒有包括的代碼中。如果我嘗試在我的中間件管道中的某處嘗試執行res.send兩次,這種情況經常發生在我身上。它可能就像請求調用之後的某處有一個res.send一樣簡單。 –

+0

是的,你是對的有一些代碼,我不包括在這裏,這是孤立的代碼,不工作,但沒有其他res.send指令之前,我發現它在我的原始結束代碼,這行'res.end()'給了我錯誤,謝謝你的時間@JeremyPridemore,問候! – nerdcoder

+0

不是固執的,但問題不在你列出的代碼中。爲了證明這一點,我將您的apiurl改爲「http:// google.com」,並且實際在本地運行此程序,並且工作正常。有些時候我遇到了這個錯誤,我在if語句中有一個'res.send()',另外一個在if語句中沒有'return'。所以他們都跑了。無論哪種方式,我們都無法幫助,因爲實際問題不在您透露的代碼中。 –

回答

0

錯誤解決,刪除GET請求外底()方法,由於它是一個異步請求(我的錯誤)

var app = require('express')(); 
var http = require('http').Server(app); 
var bodyParser = require('body-parser'); 
var request = require('request'); 

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: true })); 

http.listen(9999, function() { 
    console.log('listening...'); 
}); 

app.post('/bot',function(req,res){ 
    var apiurl = 'https://newsapi.org/v1/articles?source=techcrunch&apiKey=72cc6a313e2b4fb3af09e4593ee06fbc' 
    request(apiurl, function(error,response,body){ 
    res.send(body) 
    }) 
    //res.end() 
})