Есть пара вещей, которые нужно учитывать:
- Модуль
http-proxy-middleware
не возвращает обещание, вместо этого
возвращает экспресс-промежуточное ПО.
- Вы можете использовать пользовательский фильтр, чтобы решить, следует ли использовать прокси
- Вам необходимо добавить опции pathRewrite, чтобы переписать URL в соответствии с текущим именем хоста.
Я написал приложение для быстрой экспресс-проверки, чтобы проверить это (обратите внимание, что я переписал файл hosts с localwebapp
и localwebapp2
, указывающими на 127.0.0.1), и, похоже, он работает нормально:
const express = require('express')
const proxy = require('http-proxy-middleware')
const app = express();
const filter = (pathname, req) => {
if (req.hostname == 'localwebapp' || req.hostname == 'localwebapp2') {
return true;
}
return false;
};
app.get('/123*', (req, res) => {
res.send(`matched 123* route: ${req.path}`);
})
app.get('/abc*', (req, res) => {
res.send(`matched abc* route: ${req.path}`);
})
app.get('/test', (req, res) => {
res.send("matched non proxied route '/test'");
})
const apiProxy = proxy(filter, {
target: 'http://localhost:3000', logLevel: 'debug',
changeOrigin: true,
pathRewrite: function (path, req) {
if (req.hostname == 'localwebapp') {
return `/123${req.originalUrl}`;
}
if (req.hostname == 'localwebapp2') {
return `/abc${req.originalUrl}`;
}
return path;
}
})
app.use(apiProxy)
app.listen(3000);