Add the ability to prepend to the proxy path

This is for applications like Jupyter that aren't base path agnostic.
This commit is contained in:
Asher 2020-07-23 12:37:45 -05:00
parent c67d31580f
commit 7c2ca7d03e
No known key found for this signature in database
GPG Key ID: D63C1EF81242354A
2 changed files with 11 additions and 6 deletions

View File

@ -24,7 +24,7 @@ export class ProxyHttpProvider extends HttpProvider {
const port = route.base.replace(/^\//, "") const port = route.base.replace(/^\//, "")
return { return {
proxy: { proxy: {
base: `${route.providerBase}/${port}`, strip: `${route.providerBase}/${port}`,
port, port,
}, },
} }
@ -35,7 +35,7 @@ export class ProxyHttpProvider extends HttpProvider {
const port = route.base.replace(/^\//, "") const port = route.base.replace(/^\//, "")
return { return {
proxy: { proxy: {
base: `${route.providerBase}/${port}`, strip: `${route.providerBase}/${port}`,
port, port,
}, },
} }

View File

@ -36,9 +36,13 @@ export type Query = { [key: string]: string | string[] | undefined }
export interface ProxyOptions { export interface ProxyOptions {
/** /**
* A base path to strip from from the request before proxying if necessary. * A path to strip from from the beginning of the request before proxying
*/ */
base?: string strip?: string
/**
* A path to add to the beginning of the request before proxying.
*/
prepend?: string
/** /**
* The port to proxy. * The port to proxy.
*/ */
@ -826,10 +830,11 @@ export class HttpServer {
// sure how best to get this information to the `proxyRes` event handler. // sure how best to get this information to the `proxyRes` event handler.
// For now I'm sticking it on the request object which is passed through to // For now I'm sticking it on the request object which is passed through to
// the event. // the event.
;(request as ProxyRequest).base = options.base ;(request as ProxyRequest).base = options.strip
const isHttp = response instanceof http.ServerResponse const isHttp = response instanceof http.ServerResponse
const path = options.base ? route.fullPath.replace(options.base, "") : route.fullPath const base = options.strip ? route.fullPath.replace(options.strip, "") : route.fullPath
const path = normalize("/" + (options.prepend || "") + "/" + base, true)
const proxyOptions: proxy.ServerOptions = { const proxyOptions: proxy.ServerOptions = {
changeOrigin: true, changeOrigin: true,
ignorePath: true, ignorePath: true,