在普通Node.js中设置自定义响应头

时间:2014-02-03 09:27:55

标签: javascript json 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 \ nTransfer-Encoding:chunked \ r \ n日期:星期一,03 2014年2月09:25:06 GMT \ r \ n \ r \ n“,”{\“Content-Type \”:\“application / json \”,\“Access-Control-Allow-Origin \”:\“ * \ “\ ”访问控制允许的方法\“:\ ”GET,PUT,POST,DELETE \“,\ ”访问控制允许报头\“:\” 内容类型,最后修改,连接,访问控制允许来源,访问控制允许的方法,日期\“ \‘访问控制展露报头\’:\”内容类型,最后修改,连接,接入控制 - 允许来源,访问控制允许的方法,日期\“}”]   日期:星期一,03二月2014 09:25:38 GMT

我认为这是一个连带问题。我的问题是,如果有人想知道生成动态标题,或者任何人都可以对此有所了解,那将非常有用。

为什么我这样做?由于跨域请求问题,所以我无法控制外部服务器。因此,从我的Node.js方面,我需要附加允许跨域标头,以便可以跨域请求。

1 个答案:

答案 0 :(得分:0)

来自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);