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

我有2台express服务器:

  • api1
  • api2
  • 两者都可以通过以下方式在本地访问:

    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更改为容器名称(newsstock),代理才能正确使用容器

    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 get
    Cannot 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);