如何让 Node.JS Express 只在本地主机上监听? [英] How to get Node.JS Express to listen only on localhost?

查看:41
本文介绍了如何让 Node.JS Express 只在本地主机上监听?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个使用反向代理的应用程序,我希望它只侦听 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆