如何让 Node.JS Express 只在本地主机上监听? [英] How to get Node.JS Express to listen only on localhost?
问题描述
我有一个使用反向代理的应用程序,我希望它只侦听 localhost/127.0.0.1.
I have an application that I have behind a reverse proxy, I would like for it to only listen to localhost/127.0.0.1.
我希望这能奏效:
app.listen(3001, 'localhost');
或
app.listen(3001, '127.0.0.1');
...但我收到一个错误:
...but instead I get an error:
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);
.
Running the application without a specifying the hostname works fine, ie., app.listen(3001);
.
我正在运行 Node v0.6.14 和 express@2.5.5 并已阅读此 谷歌小组讨论并找到了此评论 在 Express application.js 中说:此方法采用与节点的 http.Server#listen() 相同的参数代码>."
I am running Node v0.6.14 and express@2.5.5 and have read this google groups discussion and have found this comment in Express application.js saying: "This method takes the same arguments as node's http.Server#listen()
."
感谢您的帮助.
推荐答案
感谢您提供的信息,我想我看到了问题所在.这是 hive-go
中的一个错误,只有在您添加主机时才会出现.它的最后几行是:
Thanks for the info, think I see the problem. This is a bug in hive-go
that only shows up when you add a host. The last lines of it are:
app.listen(3001);
console.log("... port %d in %s mode", app.address().port, app.settings.env);
当你在第一行添加主机时,它在调用app.address().port
时崩溃.
When you add the host on the first line, it is crashing when it calls app.address().port
.
问题在于.listen()
的潜在异步特性.确实应该在传递给侦听的回调中执行 console.log
调用.添加主机时,它会尝试执行异步的 DNS 查找.因此,当该行尝试获取地址时,还没有地址,因为 DNS 请求正在运行,因此崩溃了.
The problem is the potentially asynchronous nature of .listen()
. Really it should be doing that console.log
call inside a callback passed to listen. When you add the host, it tries to do a DNS lookup, which is async. So when that line tries to fetch the address, there isn't one yet because the DNS request is running, so it crashes.
试试这个:
app.listen(3001, 'localhost', function() {
console.log("... port %d in %s mode", app.address().port, app.settings.env);
});
这篇关于如何让 Node.JS Express 只在本地主机上监听?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!