簡體   English   中英

在普通的Node.js中設置自定義響應頭

[英]Setting custom response header in plain Node.js

我使用Node.js的情況是這樣的:

Client --> Node.js --> External Rest API

因此,反之亦然。 根據要求,我需要從External Rest API捕獲響應頭,並將其附加到Node.js的響應頭和客戶端,我需要將其作為單個響應頭發送。 我嘗試這樣做(此標頭來自Node.js端):

var resHeaders = {
                    'Content-Type': 'application/json',
                    'Access-Control-Allow-Origin': '*',
                    'Access-Control-Allow-Methods': 'GET,PUT,POST,DELETE',
                    'Access-Control-Allow-Headers': 'Content-Type,Last-modified,Connection,Access-Control-Allow-Origin,Access-Control-Allow-Methods,Date',
                     'Access-Control-Expose-Headers': 'Content-Type,Last-modified,Connection,Access-Control-Allow-Origin,Access-Control-Allow-Methods,Date'
                 };

我在這樣的變量中獲取External API的響應標頭:

var curlHeadersResp; //I am executing curl to get response headers

最后,我試圖像這樣編譯兩者:

var finalRespHeaders = new Array();
finalRespHeaders.push(curlHeadersResp);
finalRespHeaders.push(JSON.stringify(resHeaders));

res.writeHead(200, JSON.stringify(finalRespHeaders));

但是我得到的響應頭是這樣的:

HTTP / 1.1 200 [“ HTTP / 1.1 200 OK \\ r \\ n服務器:Apache-Coyote / 1.1 \\ r \\ n內容類型:application / json \\ r \\ n傳輸編碼:chunked \\ r \\ n日期:2014年2月3日,星期一09 :25:06 GMT \\ r \\ n \\ r \\ n“,” {\\“ Content-Type \\”:\\“ application / json \\”,\\“ Access-Control-Allow-Origin \\”:\\“ * \\” ,\\“ Access-Control-Allow-Methods \\”:\\“ GET,PUT,POST,DELETE \\”,\\“ Access-Control-Allow-Headers \\”:\\“ Content-Type,Last-modified,Connection,Access -Control-Allow-Origin,Access-Control-Allow-Methods,Date \\“,\\” Access-Control-Expose-Headers \\“:\\” Content-Type,Last-modified,Connection,Access-Control-Allow-Origin ,Access-Control-Allow-Methods,Date \\“}”]日期:2014年2月3日星期一09:25:38 GMT

我認為這是隱瞞的問題。 我的問題是,如果有人對生成動態標頭有任何想法,或者有人可以對此有所了解,那將非常有幫助。

為什么我要這樣做? 由於跨域請求問題,因此我無法控制外部服務器。 因此,從我的Node.js端,我需要附加“允許跨域標頭”,以便可以進行跨域請求。

從Node.JS文檔中:

//response.writeHead(statusCode, [reasonPhrase], [headers])
//                    number      string          object

var body = 'hello world';
response.writeHead(200, {
  'Content-Length': body.length,
  'Content-Type': 'text/plain' });

您無需創建將對象推入其中的數組,也可以將curlHeadersRespresHeaders結合在一起:

Object.keys(curlHeadersResp).forEach(function (element) {
    resHeaders[element] = curlHeadersResp[element;
});

在您編寫標頭的位置,您無需對對象進行字符串化,只需:

res.writeHead(200, resHeaders);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM