代理问题ENOTFOUND创建React应用程序Http代理中间件Express



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

我从HPM收到以下错误消息。我可以看到它返回为504网关超时

[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 dev服务器时,我得到了以下信息,这似乎工作得很好:

[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)

我想知道我是否需要对服务器上的Header Request做些什么,或者端口是否以不同的方式运行?

感谢您的帮助!!

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

它在2011年运行OS Sierra 10.12.6的iMac上不起作用,我当时正在使用它,但在2015年运行OS Mojave 10.14.16的MacBook Air上进行了测试,它起作用了。

除了知道这是问题所在之外,你知道如何修复iMac吗?

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

最新更新