nodejs request.header不存在

时间:2012-09-23 21:54:31

标签: node.js

看了很多关于从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),我得到了{{{ 1}}。所以它没有给我客户端IP但是我用它来指向应用程序。

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

那么这样做的正确方法是什么?为什么request.header对我来说不存在?

1 个答案:

答案 0 :(得分:7)

如果你使用快递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