backend: add and use for external URL discovery

This commit is contained in:
Patrik Oldsberg
2020-09-24 23:43:08 +02:00
parent b0565777e9
commit 0e76ab7873
9 changed files with 44 additions and 29 deletions
@@ -17,16 +17,20 @@
import { createRouter } from './router';
import * as winston from 'winston';
import { ConfigReader } from '@backstage/config';
import { loadBackendConfig } from '@backstage/backend-common';
import {
loadBackendConfig,
SingleHostDiscovery,
} from '@backstage/backend-common';
describe('createRouter', () => {
it('works', async () => {
const logger = winston.createLogger();
const config = ConfigReader.fromConfigs(await loadBackendConfig());
const discovery = SingleHostDiscovery.fromConfig(config);
const router = await createRouter({
config,
logger,
pathPrefix: '/proxy',
discovery,
});
expect(router).toBeDefined();
});
+6 -8
View File
@@ -23,12 +23,12 @@ import createProxyMiddleware, {
} from 'http-proxy-middleware';
import { Logger } from 'winston';
import http from 'http';
import { PluginEndpointDiscovery } from '@backstage/backend-common';
export interface RouterOptions {
logger: Logger;
config: Config;
// The URL path prefix that the router itself is mounted as, commonly "/proxy"
pathPrefix: string;
discovery: PluginEndpointDiscovery;
}
export interface ProxyConfig extends ProxyMiddlewareConfig {
@@ -76,16 +76,14 @@ export async function createRouter(
): Promise<express.Router> {
const router = Router();
const externalUrl = await options.discovery.getExternalBaseUrl('proxy');
const { pathname: pathPrefix } = new URL(externalUrl);
const proxyConfig = options.config.getOptional('proxy') ?? {};
Object.entries(proxyConfig).forEach(([route, proxyRouteConfig]) => {
router.use(
route,
buildMiddleware(
options.pathPrefix,
options.logger,
route,
proxyRouteConfig,
),
buildMiddleware(pathPrefix, options.logger, route, proxyRouteConfig),
);
});
@@ -17,6 +17,7 @@
import {
createServiceBuilder,
loadBackendConfig,
SingleHostDiscovery,
} from '@backstage/backend-common';
import { Server } from 'http';
import { Logger } from 'winston';
@@ -37,10 +38,11 @@ export async function startStandaloneServer(
logger.debug('Creating application...');
const config = ConfigReader.fromConfigs(await loadBackendConfig());
const discovery = SingleHostDiscovery.fromConfig(config);
const router = await createRouter({
config,
logger,
pathPrefix: '/proxy',
discovery,
});
const service = createServiceBuilder(module)
.enableCors({ origin: 'http://localhost:3000' })