Есть модуль перезаписи. И при использовании с другим прокси-модулем в промежуточном программном обеспечении они работают вместе как обратный прокси.
Я использую их при разработке одностраничных приложений в своем локальном окне (поэтому мне не нужно настраивать apache / nginx локально)
Это делается для того, чтобы избежать CORS и отправить все страницы (кроме js / css / images) в index.html для работы SPA.
var connect = require('connect');
var modRewrite = require('connect-modrewrite');
var proxy = require('proxy-middleware');
var url = require('url');
var app = connect()
.use(modRewrite([
"^\/api\/(.*) /send-to-api/api/$1 [L]",
"^(.*)\/css\/(.*) /send-to-ui/css/$2 [L]",
"^(.*)\/js\/(.*) /send-to-ui/js/$2 [L]",
"^(.*)\/images\/(.*) /send-to-ui/images/$2 [L]",
"^(.*)\/fonts\/(.*) /send-to-ui/fonts/$2 [L]",
"^(.*) /send-to-ui/index.html [L]"
]))
.use('/send-to-api', proxy(url.parse('http://api.server.dev/'))) // Don't forget the last backslash
.use('/send-to-ui', proxy(url.parse('http://ui.server.dev/' ))) // Don't forget the last backslash
.listen(9000)
Убедитесь, что я использую флаг [L]
, потому что я хочу, чтобы он переписал и пропустил остальные правила.
В этом случае только /api
URL-адреса получают прокси на api.server.dev
, остальные - на ui.server.dev
.
Префиксы url /send-to-api
и /send-to-ui
являются временными, и я использую их для разграничения того, что и куда пойдет, оно удаляется connect
перед отправкой на соответствующие серверы.
И да, в случае перенаправления, proxy-middleware
изменит заголовок Location
на localhost:9000