[英]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' });
您无需创建将对象推入其中的数组,也可以将curlHeadersResp
和resHeaders
结合在一起:
Object.keys(curlHeadersResp).forEach(function (element) {
resHeaders[element] = curlHeadersResp[element;
});
在您编写标头的位置,您无需对对象进行字符串化,只需:
res.writeHead(200, resHeaders);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.