在开发过程中,当将我的客户端请求从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。