From 1263b5e48bae2869f12463c870288c13eb87d880 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20Bajto=C5=A1?= Date: Thu, 9 May 2019 12:26:33 +0200 Subject: [PATCH] fix(rest-explorer): exclude basePath from /openapi URL MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Endpoints serving OpenAPI spec ignore basePath setting, i.e. even if basePath is set to `/api`, the spec is served at `/openapi.json`. Signed-off-by: Miroslav Bajtoš --- .../src/__tests__/acceptance/express.acceptance.ts | 4 ++-- .../acceptance/rest-explorer.express.acceptance.ts | 2 +- .../rest-explorer/src/rest-explorer.controller.ts | 14 +++++++++----- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/examples/express-composition/src/__tests__/acceptance/express.acceptance.ts b/examples/express-composition/src/__tests__/acceptance/express.acceptance.ts index a057bbb17fbb..d52ff9ac4622 100644 --- a/examples/express-composition/src/__tests__/acceptance/express.acceptance.ts +++ b/examples/express-composition/src/__tests__/acceptance/express.acceptance.ts @@ -4,8 +4,8 @@ // License text available at https://opensource.org/licenses/MIT import {Client} from '@loopback/testlab'; -import {setupExpressApplication} from './test-helper'; import {ExpressServer} from '../../server'; +import {setupExpressApplication} from './test-helper'; describe('ExpressApplication', () => { let server: ExpressServer; @@ -53,7 +53,7 @@ describe('ExpressApplication', () => { .get('/api/explorer/') .expect(200) .expect('content-type', /html/) - .expect(/url\: '\/api\/openapi\.json'\,/) + .expect(/url\: '\/openapi\.json'\,/) .expect(/LoopBack API Explorer/); }); }); diff --git a/packages/rest-explorer/src/__tests__/acceptance/rest-explorer.express.acceptance.ts b/packages/rest-explorer/src/__tests__/acceptance/rest-explorer.express.acceptance.ts index 60a1962be6fe..0a5e4622b449 100644 --- a/packages/rest-explorer/src/__tests__/acceptance/rest-explorer.express.acceptance.ts +++ b/packages/rest-explorer/src/__tests__/acceptance/rest-explorer.express.acceptance.ts @@ -31,7 +31,7 @@ describe('REST Explorer mounted as an express router', () => { .get('/api/explorer/') .expect(200) .expect('content-type', /html/) - .expect(/url\: '\/api\/openapi\.json'\,/); + .expect(/url\: '\/openapi\.json'\,/); }); it('redirects from "/api/explorer" to "/api/explorer/"', async () => { diff --git a/packages/rest-explorer/src/rest-explorer.controller.ts b/packages/rest-explorer/src/rest-explorer.controller.ts index 149b7fe4f8c9..ea999396d386 100644 --- a/packages/rest-explorer/src/rest-explorer.controller.ts +++ b/packages/rest-explorer/src/rest-explorer.controller.ts @@ -5,11 +5,11 @@ import {inject} from '@loopback/context'; import { - RestBindings, - RestServerConfig, OpenApiSpecForm, Request, Response, + RestBindings, + RestServerConfig, } from '@loopback/rest'; import * as ejs from 'ejs'; import * as fs from 'fs'; @@ -39,9 +39,13 @@ export class ExplorerController { index() { let openApiSpecUrl = this.openApiSpecUrl; - if (this.request.baseUrl && this.request.baseUrl !== '/') { - openApiSpecUrl = this.request.baseUrl + openApiSpecUrl; - } + + // NOTE(bajtos) OpenAPI routes do not honor basePath setting (yet) + // See https://github.com/strongloop/loopback-next/pull/2554 + // if (this.request.baseUrl && this.request.baseUrl !== '/') { + // openApiSpecUrl = this.request.baseUrl + openApiSpecUrl; + // } + const data = { openApiSpecUrl, };