2016-11-08 134 views
2

給定URL X的GET請求,應該如何定義res.send以便它對完全獨立的URL Y提供響應?如何在Node.js/Express中res.send到一個新的URL?

app.get('/', function (req, res) { 
    res.send to a new URL external of the app ('Success') 
}); 

感謝,並提前道歉的話題無知!

+1

您的意思是說有一條路線在完成時重定向到另一條路線? –

+0

嗨馬修,下面的答案有幫助嗎?如果你覺得其中一個人回答了你的問題,我相信他們會很感激你的回答是否正確。如果您仍然需要幫助,只需在此處或其答覆之一發表評論! – Bill

+0

對不起,澄清 - 我不想將請求本身重定向到另一個URL。 當GET請求進入指定的路由時,我想完全觸發一個POST到另一個URL,在主體中提供GET請求中的一些數據,但不是請求本身。 從下面的答案中可以看出,外部URL的POST不在(req,res)中,而是作爲單獨的,已定義的請求發生。原因是res只能傳回請求源 - 如果我正確理解了@ rocketspacer! –

回答

1

您只能響應請求源,它是客戶端。沒有響應另一個「外部URL」(或另一臺服務器)的事情。
但是,您可以向另一臺服務器發出請求,等待它的響應並響應我們的客戶端。

app.get('/', (req, res) => { 

    var requestOptions = { 
     hostname: 'serverB.com', //url or ip address 
     port: 8080, //default to 80 if not provided 
     path: '/take-request', 
     method: 'POST' //HTTP Method 
    }; 

    var exernalRequest = http.request(requestOptions, (externalResponse) => { 

     //ServerB done responding 
     externalResponse.on('end',() => { 

      //Response to client 
      res.end('data was send to serverB'); 
     }); 
    ); 

    // Free to send anthing to serverB 
    externalRequest.write(req.data); 
    externalRequest.end(); 
}); 
+0

雖然這個答案是正確的,但我認爲值得一提的是,在正常情況下,您可能會做這件事,因爲它可能會侵犯版權,並且知道其他法律難題。更不用說在邏輯上不正確(顯示響應bar_url的foo_url的內容)。 IMO真正想要的是重定向,IMO。 – Bill

+0

如果您擁有兩臺服務器,沒有法律問題,對嗎?就像在微服務系統中一樣。 – rocketspacer

+0

我認爲OP意味着發送數據(響應)到另一個「外部網址」不重定向到 – rocketspacer

1

您希望通過設置狀態碼並提供位置標題來重定向請求。 302表示臨時重定向,301是永久重定向。

app.get('/', function (req, res) { 
    res.statusCode = 302; 
    res.setHeader("Location", "http://www.url.com/page"); 
    res.end(); 
}); 
相關問題