diff --git a/spec/app_root_test.js b/spec/app_root_test.js index 67151e4f1ca1eb344c75ebceee33c2ccd3889bb7..b6a9f74bf90d723332e6c30007a6331c03627c41 100644 --- a/spec/app_root_test.js +++ b/spec/app_root_test.js @@ -39,8 +39,7 @@ describe('With different app root', function () { } } }) - process.env.APP_ROOT = '/appsuite/' - app = await injectApp() + app = await injectApp('/appsuite/') }) afterEach(async function () { diff --git a/spec/util.js b/spec/util.js index 04a3a341e409d043e74896a39d71835ae978d6af..2341975b6530b2ce4f95d20fcf340b099026de96 100644 --- a/spec/util.js +++ b/spec/util.js @@ -65,8 +65,9 @@ export function mockRedis (data = {}, isEnabled = true) { return mock } -export async function injectApp () { +export async function injectApp (appRoot = '/') { register.clear() + process.env.APP_ROOT = appRoot const { configMap } = await import('../src/config_map.js') const { getLatestVersion } = await import('../src/version.js') @@ -76,7 +77,9 @@ export async function injectApp () { app.register(sensible) app.register(urlData) app.register(formbody) - app.register(autoLoad, { dir: join(__dirname, '../src/routes'), prefix: process.env.APP_ROOT, autoHooks: true }) + const autoLoadOptions = { dir: join(__dirname, '../src/routes'), autoHooks: true } + if (appRoot) autoLoadOptions.options = { prefix: String(appRoot).replace(/\/$/, '') } + app.register(autoLoad, autoLoadOptions) return app } diff --git a/src/index.js b/src/index.js index 5ef2eeaa41d691648979ed1aad1d4aba8f59fa5b..2980e0aaeeadaa3f386bf547740b18ab565c76d1 100644 --- a/src/index.js +++ b/src/index.js @@ -45,7 +45,9 @@ app.register(autoLoad, { dir: join(__dirname, 'plugins') }) // Register routes // Note: routes are loaded in alphabetical order -app.register(autoLoad, { dir: join(__dirname, 'routes'), prefix: process.env.APP_ROOT, autoHooks: true }) +const autoLoadOptions = { dir: join(__dirname, 'routes'), autoHooks: true } +if (process.env.APP_ROOT !== '/') autoLoadOptions.options = { prefix: String(process.env.APP_ROOT).replace(/\/$/, '') } +app.register(autoLoad, autoLoadOptions) app.addHook('onReady', () => { // don't block the onReady hook diff --git a/src/routes/autohooks.js b/src/routes/autohooks.js index 4ce8d4ecd725fe270e2e581dfb18753212f610dc..31a3fe39c0980436d85cdad96e4a5deade5d5677 100644 --- a/src/routes/autohooks.js +++ b/src/routes/autohooks.js @@ -18,11 +18,12 @@ export default async function (app, opts) { done() }) + const slowRequestThreshold = parseInt(process.env.SLOW_REQUEST_THRESHOLD) || 4000 + // Logs the request with the 'debug' level and also logs headers with the 'trace' level app.addHook('onResponse', (req, reply, done) => { const responseTime = reply.getResponseTime() const loggingOptions = { url: req.raw.url, res: reply, method: req.method, responseTime } - const slowRequestThreshold = parseInt(process.env.SLOW_REQUEST_THRESHOLD) || 4000 /* c8 ignore next */ if (process.env.LOG_LEVEL === 'trace') loggingOptions.headers = req.headers reply.log.debug(loggingOptions, 'request completed') diff --git a/src/routes/redirects.js b/src/routes/redirects.js index e2921c8f6a5bac58926560c36444aa577a2d06cd..0adb224a1385c3e0bf69970e6344cdf6b18321d5 100644 --- a/src/routes/redirects.js +++ b/src/routes/redirects.js @@ -9,7 +9,7 @@ export default async function redirectsPlugin (fastify) { }) if (process.env.APP_ROOT.length > 1) { - fastify.get(process.env.APP_ROOT.slice(0, -1), async (req, res) => { + fastify.get('', async (req, res) => { res.redirect(process.env.APP_ROOT) }) }