【问题标题】:Setting custom response header in plain Node.js在普通 Node.js 中设置自定义响应标头
【发布时间】:2014-02-03 09:27:55
【问题描述】:

我使用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\nServer: Apache-Coyote/1.1\r\nContent-Type: application/json\r\nTransfer-Encoding: chunked\r\nDate: Mon, 03 2014 年 2 月 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-允许来源,访问控制允许方法,日期\“}”] 日期:2014 年 2 月 3 日星期一 09:25:38 GMT

我认为这是连接的问题。我的问题是,如果有人对生成动态标题有任何想法,或者有人可以对此有所了解,那将非常有帮助。

我为什么要这样做?因为跨域请求问题,所以我无法控制外部服务器。因此,从我的 Node.js 方面,我需要附加 Allow cross domain headers,以便可以进行跨域请求。

【问题讨论】:

  • 根据Node.js http Docs,您应该在传递 JSON 字符串时将标头作为对象传递。
  • @LeonidBeschastny,是的,我试过了,但我得到的是[object Object]

标签: javascript json node.js


【解决方案1】:

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

【讨论】:

  • 是的,我试过了,但我得到的是[object Object]
  • 更新答案,看看,你到底需要一个对象!不是字符串或数组
  • 好的,谢谢我试过这个,但现在我得到了无法调用非对象错误的键。我认为这是因为curlHeadersResp我正在输入json字符串。
  • 是的,可能是这个问题,解析一下再试
  • 是的,我试过了,现在我收到了这些类型的错误,意外令牌 H 日期=Mon Feb 03 2014 10:07:35 GMT+0000 (UTC)
猜你喜欢
  • 2020-02-09
  • 1970-01-01
  • 2018-06-24
  • 2016-12-21
  • 1970-01-01
  • 2017-08-13
  • 2015-03-12
  • 2022-12-15
  • 2017-09-01
相关资源
最近更新 更多