javascript - Express、http-proxy-middleware 和 net::ERR_CONNECTION_REFUSED

标签 javascript node.js express proxy http-proxy-middleware

我一直在尝试调试 Express 应用程序遇到的问题,该应用程序使用 http-proxy-middleware 将请求转发到另一个后端服务。有一个第三方应用程序通过发出显式使用其发送的 URL 中的 IP 地址的请求来调用我的服务器。当在我的开发机器上本地运行时,它使用机器的本地 IP 地址(不是 localhost 或环回 127.0.0.1)。

我已将服务器精简到最低限度,并且代理到仅响应空 JSON 对象的服务。所以所有其他因素都已被删除。它只是一个简单的 Express 应用程序和代理。

服务器

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     
$

第三方软件也会导致同样的 net::ERR_CONNECTION_REFUSED 发生(如您所料),但由于我的工作是将其与我的开发集成,所以我需要找到解决这个直接调用问题的方法IP 而不是 localhost 或 127.0.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”就足够了...

:)

关于javascript - Express、http-proxy-middleware 和 net::ERR_CONNECTION_REFUSED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40200685/

相关文章:

reactjs - 如何从 React 中的 express-session 获取 session cookie

javascript - jQuery - 检查是否选中了任何特定的单选按钮

node.js - 使用环境变量进行 Stripe 支付错误react.js node.js

javascript - GET 请求适用于浏览器的 REST 客户端,但不适用于 JS

node.js - NodeJS 中多个文件移动到另一个目录

javascript - 如何正确使用Express 4多路路由器

javascript - 如何在javascript中将表单转换为Json数组

javascript - 如果字段为空 - 做一件事情,如果不做其他事情(jQuery vs 浏览器字段自动完成)

javascript - 解析用户表中的Javascript更新行

javascript - 我传入的信息到哪里去了?