看了很多关于从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对我来说不存在?
答案 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