我使用Node / Koa编写了以下代码,该代码用于port 80
:
const
koa = require('koa'),
route = require('koa-route'),
network = koa(),
common = require('koa-common'),
PORT = 80;
// enable logger middleware
network.use(common.logger('dev'));
// enable static middleware
network.use(common.static(__dirname + '/public'));
network.use(route.get('/', index));
network.use(route.get('/about', about));
function *index() {
this.body = "<h1>Is this message on my computer, or on yours...?</h1>";
}
function *about() {
this.body = "<h2>How about now...</h2>";
}
var server = network.listen(PORT, function () {
console.log('Listening on port %d', server.address().port);
});
我为主机保留了一个地址(168.192.1.91
),在port 80
上设置了端口转发到此地址,在连接port 80
时在Windows 10防火墙中例外通过任何协议,并使用You Get Signal进行测试:
确认该端口当前处于打开状态。当我浏览localhost:80
时,我可以看到默认页面。但是,当我在浏览器中输入计算机的公共IP地址时(我输入的部分模糊,我认为应该是正确的):
此页面无法加载,并显示以下错误:
This site can’t be reached
109.[...] took too long to respond.
Try:
Reloading the page
Checking the connection
Checking the proxy and the firewall
ERR_CONNECTION_TIMED_OUT
并且Koa日志中没有任何活动(当我通过localhost:80
浏览到那里时记录正常)。什么想法可以阻止连接?
我还尝试将主机地址添加为第二个参数,如下所示:
const HOST = "127.0.0.1";
var server = network.listen(PORT, HOST, function () {
console.log('Listening on port %d', server.address().port);
});
这适用于环回地址,但是当我指定我的公共IP时,我收到此错误:
C:\Sites\order-server>node --harmony cheese.js
events.js:154
throw er; // Unhandled 'error' event
^
Error: listen EADDRNOTAVAIL [My public IP here]:80
at Object.exports._errnoException (util.js:890:11)
at exports._exceptionWithHostPort (util.js:913:20)
at Server._listen2 (net.js:1221:19)
at listen (net.js:1270:10)
at net.js:1379:9
at _combinedTickCallback (node.js:386:13)
at process._tickCallback (node.js:407:11)
at Function.Module.runMain (module.js:449:11)
at startup (node.js:142:18)
at node.js:939:3
答案 0 :(得分:0)
默认koa只能绑定到127.0.0.1,因此您可以尝试使用.listen(80, '0.0.0.0')
否则,如果相应地配置了防火墙和端口转发,则问题可能是您的Internet提供商阻止某处的传入连接。您可以尝试使用超过1024的端口,如果它只阻止下面的端口。