Skip to content

Commit e29c039

Browse files
committed
Changed link redirects from middleware to router
ref https://linear.app/ghost/issue/BER-3095 Extracted the link redirects code from the middleware to the router. This avoids route comparison on every requests Ghost receives.
1 parent 532426d commit e29c039

File tree

3 files changed

+15
-14
lines changed

3 files changed

+15
-14
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
const linkRedirects = require('../../../server/services/link-redirection');
2+
3+
module.exports = function handleRedirects(siteApp) {
4+
siteApp.get(linkRedirects.service.redirectPrefix() + '*', linkRedirects.service.handleRequest);
5+
};

ghost/core/core/frontend/web/site.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ const themeMiddleware = themeEngine.middleware;
1515
const membersService = require('../../server/services/members');
1616
const offersService = require('../../server/services/offers');
1717
const customRedirects = require('../../server/services/custom-redirects');
18-
const linkRedirects = require('../../server/services/link-redirection');
18+
const linkRedirectsHandler = require('../services/link-redirects');
1919
const {cardAssets} = require('../services/assets-minification');
2020
const siteRoutes = require('./routes');
2121
const shared = require('../../server/web/shared');
@@ -51,7 +51,7 @@ module.exports = function setupSiteApp(routerConfig) {
5151

5252
siteApp.use(offersService.middleware);
5353

54-
siteApp.use(linkRedirects.service.handleRequest);
54+
linkRedirectsHandler(siteApp);
5555

5656
// you can extend Ghost with a custom redirects file
5757
// see https://github.com/TryGhost/Ghost/issues/7707

ghost/core/core/server/services/link-redirection/LinkRedirectsService.js

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,14 @@ class LinkRedirectsService {
7777
return link;
7878
}
7979

80+
/**
81+
* @return {string}
82+
**/
83+
redirectPrefix() {
84+
const fullURLWithRedirectPrefix = `${this.#baseURL.pathname}${this.#redirectURLPrefix}`;
85+
return fullURLWithRedirectPrefix;
86+
}
87+
8088
/**
8189
* @param {import('express').Request} req
8290
* @param {import('express').Response} res
@@ -86,18 +94,6 @@ class LinkRedirectsService {
8694
*/
8795
async handleRequest(req, res, next) {
8896
try {
89-
// skip handling if original url doesn't match the prefix
90-
const fullURLWithRedirectPrefix = `${this.#baseURL.pathname}${this.#redirectURLPrefix}`;
91-
// @NOTE: below is equivalent to doing:
92-
// router.get('/r/'), (req, res) ...
93-
// To make it cleaner we should rework it to:
94-
// linkRedirects.service.handleRequest(router);
95-
// and mount routes on top like for example sitemapHandler does
96-
// Cleanup issue: https://github.com/TryGhost/Toolbox/issues/516
97-
if (!req.originalUrl.startsWith(fullURLWithRedirectPrefix)) {
98-
return next();
99-
}
100-
10197
const url = new URL(req.originalUrl, this.#baseURL);
10298
const link = await this.#linkRedirectRepository.getByURL(url);
10399

0 commit comments

Comments
 (0)