我正在使用一个工具,该工具的前端由react js(create-react-app,并由serve提供),后端由express + node组成,并且两个服务器都在不同的Docker容器上运行在远程计算机上。现在的问题是系统管理员说他将只能使前端可以从外部访问,而后端容器只能由前端容器访问。由于我正在/ API / example上调用XMLHttpRequest,并且后端没有公共URL,因此我可以使用前端服务器将请求重定向到后端吗?
为了使自己清楚,这是我想要做的,前端正在https://frontend.com
上运行,并且我从浏览器向https://frontend.com/API/example
进行了API /示例调用,服务器会将此调用重定向到后端并进行回复返回并回复。
答案 0 :(得分:2)
您应该使用某种类型的网络服务器,而不是serve npm软件包。您遇到的问题是,您想将所有请求代理到后端,并且仅将软件包提供给静态服务器。对您来说,最简单的方法是编写自定义节点js脚本,提供静态资产(例如,使用express)并将所有请求代理到后端。 (例如,使用express-http-proxy)。
示例代码如下:
const proxy = require('express-http-proxy');
const app = require('express')();
app.use('/api', proxy('http://backend.url')); // this will proxy all incoming requests to /api route to backend base url
app.use(express.static(‘path/to/your/static/assets’)); // these were previously served with serve
app.listen(3000, () => console.log(‘Frontend listening on port: 3000’));
另一种可能的方法是使用nginx,apache或您想要的任何网络服务器,并执行相同的操作。