如何在express.js中获取发起请求的域名?

时间:2013-08-28 21:41:53

标签: javascript node.js express

我使用express.js,我需要知道发起呼叫的域名。这是简单的代码

app.get(
    '/verify_license_key.json',
    function( req, res ) {
        // do something

如何从reqres对象获取域名? 我的意思是我需要知道api是否被somesite.com或someothersite.com调用。 我尝试了reqres的console.dir,但我从那里不知道,也阅读了文档,但它没有给我任何帮助。

4 个答案:

答案 0 :(得分:94)

您必须从HOST header

中检索它
var host = req.get('host');

HTTP 1.0是可选的,但1.1要求。而且,应用程序总是可以强加自己的要求。


如果这是为了支持cross-origin requests,您可以使用Origin标题。

var origin = req.get('origin');

请注意,某些跨源请求需要通过"preflight" request进行验证:

req.options('/route', function (req, res) {
    var origin = req.get('origin');
    // ...
});

如果您正在查找客户端的IP,可以使用以下命令检索:

var userIP = req.socket.remoteAddress;

请注意,如果您的服务器位于代理服务器后面,这可能会为您提供代理服务器的IP。是否可以获取用户的IP取决于代理传递的信息。但是,它通常也会出现在标题中。

答案 1 :(得分:20)

而不是:

In [30]:
numerical_cols = f.columns[f.columns.to_series().apply(lambda x: type(x) != str)]
str_cols = f.columns[f.columns.to_series().apply(lambda x: type(x) == str)]
f.reindex(columns=str_cols.union(numerical_cols.sort_values()))

Out[30]:
   A  B   -2   -1    3    4  5    6    7
0  X  Y  NaN    1    2  NaN  3  NaN    4
0  X  Z    1  NaN  NaN    2  3    4  NaN

你也可以使用:

var host = req.get('host');
var origin = req.get('origin');

答案 2 :(得分:3)

在Express 4.x中,您可以使用req.hostname,它返回没有端口的域名。即:

// Host: "example.com:3000"
req.hostname
// => "example.com"

请参阅:http://expressjs.com/en/4x/api.html#req.hostname

答案 3 :(得分:0)

最近在获取“来源”请求标头时遇到了问题,然后我发现了这个问题。但是与结果非常混淆,req.get('host')已过时,这就是为什么要提供Undefined的原因。 使用

    req.header('Origin');
    req.header('Host');
    // this method can be used to access other request headers like, 'Referer', 'User-Agent' etc.