繁体   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