当前位置: 首页 > 面试题库 >

如何使Node.JS Express仅在localhost上侦听?

束高雅
2023-03-14
问题内容

我有一个反向代理背后的应用程序,我希望它仅侦听localhost / 127.0.0.1.。

我希望这可以工作:

app.listen(3001, 'localhost');

要么

app.listen(3001, '127.0.0.1');

…但是我得到一个错误:

node.js:201
    throw e; // process.nextTick error, or 'error' event on first tick
          ^
TypeError: Cannot read property 'port' of null
    at Object.<anonymous> (/home/ctoledo/hive-go/go.js:204:76)
    at Module._compile (module.js:441:26)
    at Object..js (module.js:459:10)
    at Module.load (module.js:348:31)
    at Function._load (module.js:308:12)
    at Array.0 (module.js:479:10)
    at EventEmitter._tickCallback (node.js:192:40)

在不指定主机名的情况下运行应用程序可以正常工作,即app.listen(3001);

我正在运行Node v0.6.14 和express @ 2.5.5 ,并阅读了此Google

网上论坛的
讨论,
并在Express
application.js中找到此注释,并说:“此方法与node的参数相同http.Server#listen()。”

谢谢你的帮助。


问题答案:

感谢您提供的信息,以为我看到了问题。这是一个错误hive-go,仅在添加主机时才会显示。最后几行是:

app.listen(3001);
console.log("... port %d in %s mode", app.address().port, app.settings.env);

当您在第一行添加主机时,调用时它会崩溃app.address().port

问题是的潜在异步特性.listen()。确实应该在console.log传递给侦听的回调中进行该调用。添加主机时,它会尝试进行DNS查找,这是异步的。因此,当该行尝试获取地址时,由于DNS请求正在运行,因此没有地址,因此它崩溃了。

试试这个:

app.listen(3001, 'localhost', function() {
  console.log("... port %d in %s mode", app.address().port, app.settings.env);
});


 类似资料:
  • 问题内容: MongoDB建议,处理安全性的简单方法是在受信任的环境中运行安全性,因为“在这种配置中,必须确保只有受信任的计算机才能访问数据库TCP端口。” 这样做的最佳方法是什么?mongodb是否有办法仅本地监听localhost? 我正在使用Ubuntu 10.10 问题答案: 将以下行添加到: 正如@Josh Rickard在评论中所述:不要忘记在更新配置文件后重新启动进程:

  • 问题内容: 我有一个vpn连接,当我运行python -m SimpleHTTPServer时,它在0.0.0.0:8000上提供服务,这意味着可以通过本地主机 和 我的真实IP访问它。我不想让机器人扫描我,并且对仅通过本地主机访问服务器感兴趣。 可能吗? 也欢迎任何其他可以使用命令行立即执行的简单http服务器。 问题答案: 如果您阅读了源代码,您将看到只能在命令行上覆盖端口。如果你想改变它在服

  • 我将Apache Kafka安装在一个Azure虚拟机上,带有zookeeper,配置如下 有了这个,我可以从外部计算机访问经纪人,甚至在本地计算机上,但如果我尝试在本地计算机上使用“localhost:9092”或“127.0.0.1:9092”,则可以使用“my.domain:9092”访问经纪人,其拒绝连接或不连接。 我想知道我缺少什么或需要更改的任何其他配置。动物园管理员处于默认设置。感谢

  • 我想像下面这样嵌套资源。 但我不能得到请求。团队中的params[“dashboard_id”]参数,因为它似乎已被参数值替换。我试图通过调用一个中间函数来传递问题,并将参数传递到某个地方,但我不知道在哪里…你有答案吗?谢谢,佛朗哥

  • 问题内容: 一个典型的Redis聊天示例将如下所示(仅举一个这样的示例,请参见https://github.com/emrahayanoglu/Socket.io- Redis-RealTime-Chat- Example/blob/master/chatServer.js ): 但是,这里的问题是,当“断开连接”时,侦听器仍然处于连接状态。控制台将继续打印出。如果要检查的事件列表,他们仍然会发现

  • 我的Windows 8.1中有两个本地服务器,应用程序服务器和wampServer,通常可以通过在浏览器中键入localhost来访问应用程序服务器。wamp 服务器可通过本地主机访问:800 。所以我有两个数据库,一个来自应用服务器,另一个来自 WAMP . 现在我有MySQL工作台,我想连接到wampserver数据库,但当尝试使用主机名:localhost连接时,它只显示了appServer