微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

代理问题 ENOTFOUND Create-React-App Http-Proxy-Middleware Express

如何解决代理问题 ENOTFOUND Create-React-App Http-Proxy-Middleware Express

在开发过程中将我的客户端请求从 CRA 代理到我的 express API 服务器时,我遇到了一个新问题。

我从 HPM 收到以下错误消息。我可以看到它返回 504 Gateway Timeout

[HPM] Error occurred while trying to proxy request /api/game/leaderboard from localhost:3000 to http://localhost:5000 (ENOTFOUND) (https://nodejs.org/api/errors.html#errors_common_system_errors)

我使用 setupProxy.js 如下:

const { createProxyMiddleware } = require('http-proxy-middleware');

module.exports = app => {
    console.log('from setupPrxoy.js');
    app.use(
        '/api/**',createProxyMiddleware({
            target: 'http://localhost:5000',changeOrigin: true,})
    );
};

这似乎工作正常,因为我在启动 React 开发服务器时得到以下信息:

[HPM] Proxy created: /  -> http://localhost:5000

这是我的服务器 app.js:

const express = require('express');
const cors = require('cors');
const PORT = process.env.PORT || 5000;
const app = express();

const corsOptions = {
    credentials: true,};
app.use(cors(corsOptions));

app.use(express.json())
app.use(express.urlencoded({extended: true}))

//ROUTES
require('./routes/currentGame')(app);

app.listen(PORT,() => {
    console.log(`Server started on ${PORT}`);
});

然后路由文件

const db = require('../models');
module.exports = app => {
  app.get('/api/game/leaderboard',async (req,res,next) => {
        try {
            await db.Entry.find({
        gameNumber: 2
      })
                .limit(50)
                .populate('user','username')
                .sort({ totalscore: 'descending' })
                .exec((err,entries) => {
                    if (err) {
                        return next(err);
                    } else {
                        const leaderboard = [];
                        entries.forEach(entry => {
                            let newObj = {
                                totalscore: entry.totalscore,username: entry.user.username
                            };
              leaderboard.push(newObj);
                        });
            return res.status(200).json(leaderboard);
                    }
                });
        } catch (err) {
            return next(err);
        }
  });
}

API 在客户端运行良好,按预期返回 JSON。

我尝试回滚到旧版本的 React、React-Dom、React-Scripts 和 HPM,但没有成功。

我已经尝试删除 HPM 并在客户端的 package.json 中使用一个简单的代理。没用,收到了类似的消息。

所以我知道代理正在工作(我认为)

我查找了 ENOTFOUND 并确定它是某种 DNS 地址错误

这是我在命令行中得到的

node      5033   [mynamewithheld]   23u  IPv4 0x93d5c87aa7d4fbd3      0t0    TCP *:3000 (LISTEN)
node      5035   [mynamewithheld]   23u  IPv6 0x93d5c87aa770a0ab      0t0    TCP *:5000 (LISTEN)

我想知道我是否需要对服务器上的标头请求做一些事情,或者端口的运行方式是否不同?

感谢任何帮助!

解决方法

我想我已经将问题缩小到硬件上。

它在运行 OS Sierra 10.12.6 的 2011 iMac 上不起作用,这是我使用的,但在运行 OS Mojave 10.14.16 的 2015 MacBook Air 上进行了测试,并且可以运行。

除了知道这是问题所在之外,您知道如何修复以使其在 iMac 上运行吗?

,

确保 localhost 映射到 etc/hosts 文件中的 127.0.0.1。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。