【问题标题】:Reading incoming HTTP headers with node.js使用 node.js 读取传入的 HTTP 标头
【发布时间】:2011-05-31 14:05:32
【问题描述】:

现在作为示例,我收到一个响应,其中部分键/值作为 javascript 对象:

status: '200 OK',
'content-encoding': 'gzip'

我可以通过以下方式轻松读出并记录状态消息:headers.status 但是当我尝试记录内容编码(在这种特殊情况下我需要)时,它会出错:

headers.'content-encoding' <- obviously the quotes it doesn't like
headers.content-encoding <- obviously the '-' it doesn't like

我想如何获取/读取/记录它的内容编码值?

你好,

m0rph3v5

【问题讨论】:

    标签: javascript json variables http-headers node.js


    【解决方案1】:

    Javascript 还支持用于引用属性的方括号表示法,因此如果 headers 是一个合适的对象,您可以使用 headers['content-encoding']

    【讨论】:

    • 非常感谢,愚蠢地我尝试过的只是标题。['content-encoding'] 没想到我会意外地将两者结合起来。 :)
    • 总有第一次 :-) 祝你好运。
    【解决方案2】:

    JavaScript 属性的名称如您所知。如果名称是合法标识符,并且您在编写代码时知道所需的文字名称,则可以将其与点分符号一起使用。

    var foo = headers.foo;
    

    当名称不是合法标识符时,或者如果您想确定在运行时要查找的名称,您可以使用字符串:

    var encoding = headers['content-encoding'];
    

    var name = 'content-encoding';
    var encoding = headers[name];
    

    甚至

    var x = 'encoding';
    var encoding = headers['content-' + x];
    

    如您所见,它不一定是 literal 字符串。这对于必须接受属性名称作为函数参数或类似参数的通用函数来说非常方便。

    请注意,属性名称区分大小写。

    【讨论】:

      【解决方案3】:

      我认为你应该安装非常好的express 框架。我真的简化了 node.js web 开发。

      你可以使用 npm 安装它

      npm install express
      

      这个sn-p告诉你如何设置标题和读取标题

      var express = require('express');
      
      var app = express.createServer();
      
      app.get('/', function(req, res){
          console.log(req.header('a'));
          res.header('time', 12345);
      
          res.send('Hello World');
      });
      
      app.listen(3000);
      

      从命令行卷曲

      $curl http://localhost:3000/ -H "a:3434" -v
      * About to connect() to localhost port 3000 (#0)
      *   Trying ::1... Connection refused
      *   Trying 127.0.0.1... connected
      * Connected to localhost (127.0.0.1) port 3000 (#0)
      > GET / HTTP/1.1
      > User-Agent: curl/7.21.2 (i686-pc-linux-gnu) libcurl/7.21.2 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.18
      > Host: localhost:3000
      > Accept: */*
      > a:3434
      > 
      < HTTP/1.1 200 OK
      < X-Powered-By: Express
      < time: 12345
      < Content-Type: text/html; charset=utf-8
      < Content-Length: 11
      < Date: Tue, 28 Dec 2010 13:58:41 GMT
      < X-Response-Time: 1ms
      < Connection: keep-alive
      < 
      * Connection #0 to host localhost left intact
      * Closing connection #0
      Hello World
      

      输出header的日志通过curl发送到节点服务器:

      $ node mo.js 
      3434
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-31
        • 1970-01-01
        • 2013-06-06
        • 1970-01-01
        • 1970-01-01
        • 2023-03-21
        • 1970-01-01
        • 2012-02-09
        相关资源
        最近更新 更多