设置具有多个目标的代理服务器?

cgd*_*cgd 5 http-proxy express http-proxy-middleware

我有 2 个快递服务器:

  1. 接口1
  2. API2

两者都可以使用以下方式在本地访问:

http://localhost:3000/news

http://localhost:3001/stock

我的目标:

从代理服务器访问两个 Express 服务器端点http://localhost:8008

我的问题:

我只能到达第一个api1的端点

任何帮助将不胜感激 :)

const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');

const api1 = createProxyMiddleware({
  target: 'http://localhost:3000'
});


const api2 = createProxyMiddleware({
    target: 'http://localhost:3001'
  });

const app = express();

app.use(api1);
app.use(api2);

app.listen(8008);
Run Code Online (Sandbox Code Playgroud)

**编辑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);
Run Code Online (Sandbox Code Playgroud)

仍在寻找解决方案!@!请帮助!

编辑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);
Run Code Online (Sandbox Code Playgroud)

编辑 3(*奖励):在容器设置中应用解决方案 - 必须将 localhost 更改为容器名称(新闻股票),以便代理能够正确使用容器。

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);
Run Code Online (Sandbox Code Playgroud)

max*_*max 3

代理.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);
Run Code Online (Sandbox Code Playgroud)

新闻服务器.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);
Run Code Online (Sandbox Code Playgroud)

查询http://localhost:8008/news/headlines => '来自头条新闻的你好'

stockServer.js

const express = require('express');
const app = express();

app.get('/stock', function(req, res) {
    res.send('hello from api2');
  });


app.listen(3001);
Run Code Online (Sandbox Code Playgroud)

查询http://localhost:8008/stock => 'hello from api2'