11const express = require ( 'express' )
22const instrument = require ( '../lib/instrument-middleware' )
33const haltOnDroppedConnection = require ( './halt-on-dropped-connection' )
4+ const abort = require ( './abort' )
5+ const timeout = require ( './timeout' )
6+ const morgan = require ( 'morgan' )
7+ const datadog = require ( './connect-datadog' )
8+ const rateLimit = require ( './rate-limit' )
9+ const cors = require ( './cors' )
10+ const helmet = require ( 'helmet' )
11+ const csp = require ( './csp' )
12+ const cookieParser = require ( './cookie-parser' )
13+ const csrf = require ( './csrf' )
14+ const handleCsrfErrors = require ( './handle-csrf-errors' )
15+ const compression = require ( 'compression' )
16+ const disableCachingOnSafari = require ( './disable-caching-on-safari' )
17+ const setFastlySurrogateKey = require ( './set-fastly-surrogate-key' )
18+ const setFastlyCacheHeaders = require ( './set-fastly-cache-headers' )
19+ const catchBadAcceptLanguage = require ( './catch-bad-accept-language' )
20+ const reqUtils = require ( './req-utils' )
21+ const recordRedirect = require ( './record-redirect' )
22+ const connectSlashes = require ( 'connect-slashes' )
23+ const handleErrors = require ( './handle-errors' )
424
525const { NODE_ENV } = process . env
626const isDevelopment = NODE_ENV === 'development'
@@ -15,58 +35,57 @@ const asyncMiddleware = fn =>
1535
1636module . exports = function ( app ) {
1737 // *** Request connection management ***
18- if ( ! isTest ) app . use ( require ( './ timeout' ) )
19- app . use ( require ( './ abort' ) )
38+ if ( ! isTest ) app . use ( timeout )
39+ app . use ( abort )
2040
2141 // *** Development tools ***
22- app . use ( require ( 'morgan' ) ( 'dev' , { skip : ( req , res ) => ! isDevelopment } ) )
23- if ( isDevelopment ) app . use ( require ( './webpack' ) )
42+ app . use ( morgan ( 'dev' , { skip : ( req , res ) => ! isDevelopment } ) )
2443
2544 // *** Observability ***
2645 if ( process . env . DD_API_KEY ) {
27- app . use ( require ( './connect- datadog' ) )
46+ app . use ( datadog )
2847 }
2948
3049 // *** Early exits ***
3150 // Don't use the proxy's IP, use the requester's for rate limiting
3251 // See https://expressjs.com/en/guide/behind-proxies.html
3352 app . set ( 'trust proxy' , 1 )
34- app . use ( require ( './rate-limit' ) )
53+ app . use ( rateLimit )
3554 app . use ( instrument ( './handle-invalid-paths' ) )
3655 app . use ( instrument ( './handle-next-data-path' ) )
3756
3857 // *** Security ***
39- app . use ( require ( './ cors' ) )
40- app . use ( require ( ' helmet' ) ( {
58+ app . use ( cors )
59+ app . use ( helmet ( {
4160 // Override referrerPolicy to match the browser's default: "strict-origin-when-cross-origin".
4261 // Helmet now defaults to "no-referrer", which is a problem for our archived assets proxying.
4362 referrerPolicy : {
4463 policy : 'strict-origin-when-cross-origin'
4564 }
4665 } ) )
47- app . use ( require ( './ csp' ) ) // Must come after helmet
48- app . use ( require ( './cookie-parser' ) ) // Must come before csrf
66+ app . use ( csp ) // Must come after helmet
67+ app . use ( cookieParser ) // Must come before csrf
4968 app . use ( express . json ( ) ) // Must come before csrf
50- app . use ( require ( './ csrf' ) )
51- app . use ( require ( './handle-csrf-errors' ) ) // Must come before regular handle-errors
69+ app . use ( csrf )
70+ app . use ( handleCsrfErrors ) // Must come before regular handle-errors
5271
5372 // *** Headers ***
5473 app . set ( 'etag' , false ) // We will manage our own ETags if desired
55- app . use ( require ( ' compression' ) ( ) )
56- app . use ( require ( './disable-caching-on-safari' ) )
57- app . use ( require ( './set-fastly-surrogate-key' ) )
58- app . use ( require ( './catch-bad-accept-language' ) )
74+ app . use ( compression ( ) )
75+ app . use ( disableCachingOnSafari )
76+ app . use ( setFastlySurrogateKey )
77+ app . use ( catchBadAcceptLanguage )
5978
6079 // *** Config and context for redirects ***
61- app . use ( require ( './req-utils' ) ) // Must come before record-redirect and events
62- app . use ( require ( './record-redirect' ) )
80+ app . use ( reqUtils ) // Must come before record-redirect and events
81+ app . use ( recordRedirect )
6382 app . use ( instrument ( './detect-language' ) ) // Must come before context, breadcrumbs, find-page, handle-errors, homepages
6483 app . use ( asyncMiddleware ( instrument ( './context' ) ) ) // Must come before early-access-*, handle-redirects
6584 app . use ( asyncMiddleware ( instrument ( './contextualizers/short-versions' ) ) ) // Support version shorthands
6685
6786 // *** Redirects, 3xx responses ***
6887 // I ordered these by use frequency
69- app . use ( require ( 'connect-slashes' ) ( false ) )
88+ app . use ( connectSlashes ( false ) )
7089 app . use ( instrument ( './redirects/external' ) )
7190 app . use ( instrument ( './redirects/help-to-docs' ) )
7291 app . use ( instrument ( './redirects/language-code-redirects' ) ) // Must come before contextualizers
@@ -132,7 +151,7 @@ module.exports = function (app) {
132151 app . use ( asyncMiddleware ( instrument ( './is-next-request' ) ) )
133152
134153 // *** Headers for pages only ***
135- app . use ( require ( './set-fastly-cache-headers' ) )
154+ app . use ( setFastlyCacheHeaders )
136155
137156 // handle serving NextJS bundled code (/_next/*)
138157 if ( process . env . FEATURE_NEXTJS ) {
@@ -146,5 +165,5 @@ module.exports = function (app) {
146165 app . get ( '/*' , asyncMiddleware ( instrument ( './render-page' ) ) )
147166
148167 // *** Error handling, must go last ***
149- app . use ( require ( './handle-errors' ) )
168+ app . use ( handleErrors )
150169}
0 commit comments