我一直在尝试调试我有一个Express App的问题,它使用http-proxy-middleware将请求转发给另一个后端服务。第三部分应用程序通过发出明确使用其发送的URL中的IP地址的请求来调用我的服务器。在我的开发机器上本地运行时,它使用机器的本地IP地址(不是localhost或环回127.0.0.1)。
我已经将我的服务器剥离到最低限度,我正在代理一个只响应空JSON对象的服务。所以其他所有因素都被删除了。它只是一个简单的快递应用程序和代理。
var express = require('express');
var proxyMiddleware = require('http-proxy-middleware');
var port = 4000;
var app = express();
var options = {
target: 'http://jsonplaceholder.typicode.com',
logLevel: 'debug'
}
var apiProxy = proxyMiddleware('/myportfolio', options);
app.use(apiProxy);
app.listen(port, 'localhost', (err) => {
if (err) {
console.log(err);
process.exit(1);
}
// So we can see a message whilst it bundles
console.log(`now running on port: ${port}\n`);
});
我的应用程序启动并显示消息
'现在在端口上运行:4000'
我启动浏览器并发送以下内容:
http://localhost:4000/myportfolio
并获取
// 20161023082019
// http://localhost:4000/myportfolio
{
}
这绝对是好的和预期的答案,到目前为止都很好。 然后我可以切换到使用环回IP地址
当我输入
http://127.0.0.1:4000/myportfolio
我得到了
// 20161023082943
// http://127.0.0.1:4000/myportfolio
{
}
但是当我使用
时http://192.168.1.126:4000/myportfolio
我什么都没有回复,Chrome网络标签显示以下错误
GET http://192.168.1.126:4000/myportfolio net::ERR_CONNECTION_REFUSED
和chrome显示标准无法连接消息。
This site can’t be reached
192.168.1.126 refused to connect.
我已检查本地计算机的IP地址及其正确的
与“网络实用程序”告诉我的相同
并检查终端中的地址:
$ ifconfig | grep inet
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
inet6 fe80::4c:3ebe:e51d:819f%en0 prefixlen 64 secured scopeid 0x4
inet 192.168.1.126 netmask 0xffffff00 broadcast 192.168.1.255
inet6 fe80::18a8:e9ff:fe89:25e7%awdl0 prefixlen 64 scopeid 0x8
inet6 fe80::694c:e86:8b39:47f7%utun0 prefixlen 64 scopeid 0xa
inet6 fe80::45eb:e4b2:c242:48b%utun2 prefixlen 64 scopeid 0xc
inet6 fe80::859:d69c:1aec:7a59%utun1 prefixlen 64 scopeid 0xb
inet6 fe80::8d7:fd2c:e131:6832%utun3 prefixlen 64 scopeid 0xd
$
和
$ netstat -an | grep 4000
tcp4 0 0 127.0.0.1.4000 *.* LISTEN
$
第三方软件也会导致同样的网络:: ERR_CONNECTION_REFUSED(正如您所料),但由于我已经将它与我的开发集成在一起,我需要找到一个解决此问题的问题。 IP而不是localhost或127.0.0.1。
答案 0 :(得分:1)
在大约几个小时的内部拖网工作之后确定好,最后查看中间件的问题列表
答案很简单 - 我只需要通过传递不同的主机(而不是通常的' localhost')来打开Express APP。
app.listen(port, '0.0.0.0', (err) => {
if (err) {
console.log(err);
process.exit(1);
}
// So we can see a message whilst it bundles
console.log(`now running on port: ${port}\n`);
});
我会在这里留下这个答案,以防将来对其他人使用。
我可以输入我的特定IP地址,但因为我在DHCP' 0.0.0.0'现在就足够了......
:)