From 8fd7debe89d56c9cdffddf2d48d3b6ef559d2a49 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 11 Oct 2024 12:44:08 +0200 Subject: [PATCH] backend-defaults: pretty-print JSON responses during development Signed-off-by: Patrik Oldsberg --- .changeset/slow-walls-report.md | 13 +++++++++++++ .../core-services/root-http-router.md | 9 ++++++++- .../rootHttpRouter/rootHttpRouterServiceFactory.ts | 3 +++ 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 .changeset/slow-walls-report.md diff --git a/.changeset/slow-walls-report.md b/.changeset/slow-walls-report.md new file mode 100644 index 0000000000..e5ab380006 --- /dev/null +++ b/.changeset/slow-walls-report.md @@ -0,0 +1,13 @@ +--- +'@backstage/backend-defaults': patch +--- + +The default root HTTP service implementation will now pretty-print JSON responses in development. + +If you are overriding the `rootHttpRouterServiceFactory` with a `configure` function that doesn't call `applyDefaults`, you can introduce this functionality by adding the following snippet inside `configure`: + +```ts +if (process.env.NODE_ENV === 'development') { + app.set('json spaces', 2); +} +``` diff --git a/docs/backend-system/core-services/root-http-router.md b/docs/backend-system/core-services/root-http-router.md index 88a10455f5..a2316b957b 100644 --- a/docs/backend-system/core-services/root-http-router.md +++ b/docs/backend-system/core-services/root-http-router.md @@ -59,7 +59,7 @@ const backend = createBackend(); backend.add( rootHttpRouterServiceFactory({ - configure: ({ app, middleware, routes, config, logger, lifecycle }) => { + configure: ({ app, middleware, routes, config, logger, healthRouter }) => { // Refer to https://expressjs.com/en/guide/writing-middleware.html on how to write express middleware const customMiddleware = { logging(): RequestHandler { @@ -88,11 +88,18 @@ backend.add( }, }; + // The default implementation pretty-prints JSON responses in development + if (process.env.NODE_ENV === 'development') { + app.set('json spaces', 2); + } + // the built in middleware is provided through an option in the configure function app.use(middleware.helmet()); app.use(middleware.cors()); app.use(middleware.compression()); + app.use(healthRouter); + // you can add you your own middleware in here app.use(customMiddleware.logging()); diff --git a/packages/backend-defaults/src/entrypoints/rootHttpRouter/rootHttpRouterServiceFactory.ts b/packages/backend-defaults/src/entrypoints/rootHttpRouter/rootHttpRouterServiceFactory.ts index a18ddbe096..59811c15d4 100644 --- a/packages/backend-defaults/src/entrypoints/rootHttpRouter/rootHttpRouterServiceFactory.ts +++ b/packages/backend-defaults/src/entrypoints/rootHttpRouter/rootHttpRouterServiceFactory.ts @@ -106,6 +106,9 @@ const rootHttpRouterServiceFactoryWithOptions = ( lifecycle, healthRouter, applyDefaults() { + if (process.env.NODE_ENV === 'development') { + app.set('json spaces', 2); + } app.use(middleware.helmet()); app.use(middleware.cors()); app.use(middleware.compression());