allow backend to start if proxy target is not set

Signed-off-by: Brian Fletcher <brian@roadie.io>
This commit is contained in:
Brian Fletcher
2022-01-28 09:49:55 +00:00
parent 32dd057f3d
commit 124520078c
2 changed files with 66 additions and 18 deletions
@@ -30,23 +30,66 @@ const mockCreateProxyMiddleware = createProxyMiddleware as jest.MockedFunction<
>;
describe('createRouter', () => {
it('works', async () => {
const logger = getVoidLogger();
const config = new ConfigReader({
backend: {
baseUrl: 'https://example.com:7007',
listen: {
port: 7007,
describe('where all proxy config are valid', () => {
it('works', async () => {
const logger = getVoidLogger();
const config = new ConfigReader({
backend: {
baseUrl: 'https://example.com:7007',
listen: {
port: 7007,
},
},
},
proxy: {
'/test': {
target: 'https://example.com',
headers: {
Authorization: 'Bearer supersecret',
},
},
},
});
const discovery = SingleHostDiscovery.fromConfig(config);
const router = await createRouter({
config,
logger,
discovery,
});
expect(router).toBeDefined();
});
const discovery = SingleHostDiscovery.fromConfig(config);
const router = await createRouter({
config,
logger,
discovery,
});
describe('where buildMiddleware would fail', () => {
it('works', async () => {
const logger = getVoidLogger();
logger.warn = jest.fn();
const config = new ConfigReader({
backend: {
baseUrl: 'https://example.com:7007',
listen: {
port: 7007,
},
},
// no target would cause the buildMiddleware to fail
proxy: {
'/test': {
headers: {
Authorization: 'Bearer supersecret',
},
},
},
});
const discovery = SingleHostDiscovery.fromConfig(config);
const router = await createRouter({
config,
logger,
discovery,
});
expect((logger.warn as jest.Mock).mock.calls[0][0]).toEqual(
'skipped configuring /test due to Proxy target must be a string',
);
expect(router).toBeDefined();
});
expect(router).toBeDefined();
});
});
+9 -4
View File
@@ -185,11 +185,16 @@ export async function createRouter(
const { pathname: pathPrefix } = new URL(externalUrl);
const proxyConfig = options.config.getOptional('proxy') ?? {};
Object.entries(proxyConfig).forEach(([route, proxyRouteConfig]) => {
router.use(
route,
buildMiddleware(pathPrefix, options.logger, route, proxyRouteConfig),
);
try {
router.use(
route,
buildMiddleware(pathPrefix, options.logger, route, proxyRouteConfig),
);
} catch (e) {
options.logger.warn(`skipped configuring ${route} due to ${e.message}`);
}
});
return router;