检查Node.js连接是否来自本地主机。

15

有办法检查nodejs连接来自哪里吗?

在Javascript中我们这样做:

if (window.location.host == "localhost")
{
    // Do whatever
}

然而我不知道如何在Node.js中实现它,我想要做的是(这样我只需要维护一个文件夹用于git仓库)

if (window.location.host == "localhost"){
    // connect to localhost mongodb
}else{
    // connect to mongodb uri
}

2
你可以将请求IP服务器IP进行比对。 - Joseph
最终使用require("os")方法,有帮助的注释。 - Anonymous
4个回答

6
var os = require('os');
var database_uri;

if(os.hostname().indexOf("local") > -1)
  database_uri = "mongodb://localhost/database";
else
  database_uri = "mongodb://remotehost/database";

//Connect to database
mongoose.connect(database_uri, 
                 function(err){
                   if(err) console.log(err); 
                   else console.log('success');});

10
如果你更改了你的主机名(给你的计算机命名),这将不起作用。 - NetOperator Wibby

4
最好的方法是使用:
req.connection.remoteAddress
这种方式。它可以帮助你获取客户端的IP地址,并与其进行通信。

3
req.connection.remoteAddress已被弃用,请使用req.socket.remoteAddress - avisk

2

我在express中使用IPv4,代码如下:

let ipV4 = req.connection.remoteAddress.replace(/^.*:/, '');
if (ipV4 === '1') ipV4 = 'localhost';

ipV4包含调用客户端的正确值,如果通过这种方式访问计算机,则为 === 'localhost'。

您必须了解它与在浏览器中运行的js脚本不同,这是关于客户端通过网络接口连接到服务器的问题。

对于您描述的用例,即通过“localhost”访问,这将起作用。

对于其他用例,您可能需要做更多的工作,但local表示它正在使用计算机的一个接口,因此您可以检查所有接口以进行匹配。

Translated:

ipV4包含调用客户端的正确值,如果通过这种方式访问计算机,则为 === 'localhost'。

请注意,它与在浏览器中运行的js脚本不同,这是关于客户端通过网络接口连接到服务器的问题。

对于您描述的用例,即通过“localhost”访问,这就足够了。

对于其他用例,您可能需要执行更多操作,但local表示它正在使用计算机的某个接口,因此您可以检查所有接口以进行匹配。


1

13
这相当危险,因为任何人都可以伪造标题。 - Domi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接