【问题标题】:nodejs request.header dosnt exists节点js request.header不存在
【发布时间】:2012-09-24 06:16:41
【问题描述】:

看了很多关于从 NodeJS 获取客户端 IP 地址的教程、文章和 stackoverflow 问题。 几乎所有人都使用这个request.header('x-forwarded-for') 我的NodeJS v0.8.7 没有那个 request.header 函数。

typeof request.header 返回undefined

但是我有 request.headers 是一个包含一些信息的对象:

{ host: '127.0.0.1:8000',
  connection: 'keep-alive',
  accept: '*/*',
  'user-agent': 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1',
  'accept-encoding': 'gzip,deflate,sdch',
  'accept-language': 'en-US,en;q=0.8',
  'accept-charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3' }

主机值似乎值得一试。在 localhost 上运行节点显然返回了127.0.0.1:8000,但随后我尝试从同一网络上的上网本访问我的 node.js 站点,指向 192.168.0.13(运行节点的我的桌面 IP),我得到了192.168.0.13:8000。所以它没有给我客户端 IP,而是我使用哪个 IP 来指向应用程序。

然后我尝试了request.connection.remoteAddress,因为它在我找到的教程中命名。从本地主机运行得到127.0.0.1,从我的上网本运行192.168.0.12。所以它奏效了! 192.168.0.12 是我的上网本 IP。 但是在教程和问题中,我发现他们说正确的方法是第一个,这取决于代理是否属于您。

那么正确的方法是什么?为什么 request.header 对我不存在?

【问题讨论】:

    标签: node.js


    【解决方案1】:

    如果您使用的是 express 3,您可以这样做:

    req.ip
    // => "127.0.0.1"
    

    http://expressjs.com/api.html#req.ip

    如果你想要其他标题,你可以使用这个:

    req.get(field)
    
    req.get('Content-Type');
    // => "text/plain"
    
    req.get('content-type');
    // => "text/plain"
    
    req.get('Something');
    // => undefined
    

    http://expressjs.com/api.html#req.get

    如果您使用的是普通节点,请使用:

    request.headers
    

    【讨论】:

      猜你喜欢
      • 2016-02-13
      • 2018-02-17
      • 1970-01-01
      • 2019-01-21
      • 2015-10-18
      • 2016-08-10
      • 1970-01-01
      • 1970-01-01
      • 2013-03-19
      相关资源
      最近更新 更多