如果由于任何原因您尝试在没有服务器的情况下部署客户端,请确保删除:
"proxy": "http://localhost:5000"
从客户端的package.json中..
2019年7月更新:
Create React App 2.0 已经改变了我们定义代理的方式。 要确定您正在使用的版本,请检查客户端side package.json: "react-scripts" 大于 "2.x.x"
现在在client/目录中安装此软件包:
npm install http-proxy-middleware --save
在client/src/目录中创建setupProxy.js文件。不需要在任何地方导入此文件,CRA会查找名为setupProxy.js的文件并加载它。有不同的方法来添加代理:
Option 1:
const { createProxyMiddleware } = require('http-proxy-middleware');module.exports = function(app) {
app.use(
createProxyMiddleware(["/api", , "/otherApi"], { target: "http://localhost:5000" })
);
};
选择二
const { createProxyMiddleware } = require('http-proxy-middleware');
module.exports = function(app) {
app.use(createProxyMiddleware('/api/**', { target: 'http://localhost:5000' }));
app.use(createProxyMiddleware('/otherApi/**', { target: 'http://localhost:5000' }));
};
回答评论
这个代理只在开发环境中使用,在生产/Heroku中,所有内容都在同一台服务器下运行,因此那里没有必要使用代理。
create-react-app 服务器只在开发环境中运行,因此当应用程序以PROD模式运行时,它只用于生成将由Node / Express服务器提供的生产JS捆绑包。
有关如何使其在生产环境中运行的问题,请参阅此其他答案。
Invalid Host Header
被用作解决DNS Rebinding问题的一种方案。
为了解决这个问题,您需要在create-react-app
的根目录中创建一个名为.env.development的文件。在该文件中设置:
HOST=name.herokuapp.com
该文档介绍了在开发环境下代理API请求的方法。如果您在设置代理后遇到“无效主机头错误”,则需要进行一些额外配置。具体步骤请参考上述链接。webpack.config.js
文件中设置allowedHosts
的值来解决了这个问题。您可以从官方webpack文档中了解有关allowedHosts属性的更多信息。webpack.config.json
的module.exports
中:module.exports = {
// Some stuff that already exists before
//.
//.
//.
devServer: {
allowedHosts: 'all'
},
}
注意: 不建议在allowedHosts
属性中使用all
,因为存在安全问题。请确保指定应用程序必须运行的特定主机。const accessToken = jwt.sign(
{ "userName": foundUser.userName },
process.env.REACT_APP_ACCESS_TOKEN_SECRET,
{ expiresIn: '2h' },
);
const refreshToken = jwt.sign(
{ "userName": foundUser.userName },
process.env.REACT_APP_REFRESH_TOKEN_SECRET,
{ expiresIn: '1d' },
);
在Heroku,配置变量中使用相同的环境变量
run build
以创建生产环境的静态文件吗? - Shane