Express 设置具有多个目标的代理服务器?
我有2台express服务器:Express 设置具有多个目标的代理服务器?,express,http-proxy,http-proxy-middleware,Express,Http Proxy,Http Proxy Middleware,我有2台express服务器: api1 api2 两者都可以通过以下方式在本地访问: http://localhost:3000/news http://localhost:3001/stock 我的目标: 从http://localhost:8008 我的问题: 我只能点击第一个api1的端点 任何帮助都将不胜感激:) **编辑1: 我尝试了这个方法,它适用于api1端点,但不适用于api2端点 const express = require('express'); const { crea
http://localhost:3000/news
http://localhost:3001/stock
我的目标:
从http://localhost:8008
我的问题:
我只能点击第一个api1的端点
任何帮助都将不胜感激:)
**编辑1:
我尝试了这个方法,它适用于api1端点,但不适用于api2端点
const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');
const apiProxy = createProxyMiddleware('/', {
target: 'http://localhost:3000'
});
const apiProxytwo = createProxyMiddleware('/', {
target: 'http://localhost:3001'
});
const app = express();
app.use(apiProxy,apiProxytwo);
app.listen(8008);
仍在寻找解决方案!!@!救命啊
编辑2:工作解决方案
const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');
const app = express();
app.use('/news/*', createProxyMiddleware({ target: 'http://localhost:3000', changeOrigin: true ,}));
app.use('/stock/', createProxyMiddleware({ target: 'http://localhost:3001', changeOrigin: true, }));
app.listen(8008);
编辑3(*奖励):在容器设置中应用解决方案-必须将localhost更改为容器名称(news和stock),代理才能正确使用容器
const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');
const app = express();
app.use('/news/*', createProxyMiddleware({ target: 'http://news:3000', changeOrigin: true ,}));
app.use('/stock/', createProxyMiddleware({ target: 'http://stock:3001', changeOrigin: true, }));
app.listen(8008);
proxy.js:
const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');
const app = express();
app.use('/news/*', createProxyMiddleware({ target: 'http://localhost:3000', changeOrigin: true }));
app.use('/stock', createProxyMiddleware({ target: 'http://localhost:3001', changeOrigin: true }));
app.listen(8008);
newsServer.js
const express = require('express');
const app = express();
app.get('/news/headlines', (req, res) => {
res.send('hello from headlines')
});
app.get('/news/other', (req, res) => {
res.send('hello from other')
})
app.listen(3000);
query=>“标题中的您好”
stockServer.js
const express = require('express');
const app = express();
app.get('/stock', function(req, res) {
res.send('hello from api2');
});
app.listen(3001);
query=>“来自api2的hello”您应该为每个api添加一个路径。当前,您没有添加路径,它必须将两个api都添加到根路径
/
,这就是为什么一个api可以访问,而另一个不可以访问的原因。Try:app.use('/api1',api1)代码>和应用程序使用('/api2',api2)代码>。您好,我按照建议进行了更改。仍然不工作所以当您向http://localhost:8008/api1
和http://localhost:8008/api2
?哪一个可访问,哪一个不可访问?当我尝试http://localhost:8008/api2/stock
I getCannot get/api2/stock
同样适用于api1
Hi maxi,感谢您的回复。我试图避免这样做,因为我将不得不手动编辑400多个端点所有新闻和股票端点都有第二部分,例如/news/headlines
有什么想法吗?之前执行node newsServer.js
和node stockServer.js
谢谢,我无法使您的代理100%正常工作,因此我最终更改了其中一台express服务器的所有端点名称。const express=require('express');const{createProxyMiddleware}=require('http-proxy-middleware');const apiProxy=createProxyMiddleware('/api/v1',{target:'',logLevel:'debug'});const apiProxytwo=createProxyMiddleware('/',{target:'',logLevel:'debug',});常量app=express();应用程序使用(apiProxy,apiProxytwo);app.listen(8008);谢谢你的帮助,马克西@cgd很遗憾,您只需在proxy.js中从'/news'
更改为'/news/*'
,就可以扩展您的routes@cgd非常好!你能接受我的回答作为你的解决方案吗?
const express = require('express');
const app = express();
app.get('/stock', function(req, res) {
res.send('hello from api2');
});
app.listen(3001);