我使用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方面,我需要附加允许跨域标头,以便可以跨域请求。
答案 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' });
您不需要创建数组并将对象推送到它,将curlHeadersResp
和resHeaders
连接在一起:
Object.keys(curlHeadersResp).forEach(function (element) {
resHeaders[element] = curlHeadersResp[element;
});
在编写标题的地方,您不需要对对象进行字符串化,只需:
res.writeHead(200, resHeaders);