@apolitical/server
Version:
Node.js module to encapsulate Apolitical's express server setup
47 lines (44 loc) • 1.24 kB
JavaScript
;
module.exports = ({
bodyParser: { json, urlencoded },
express,
compression,
cors,
cookieParser,
prerender,
config,
}) => {
const {
BODY_PARSER_OPTIONS: { JSON_OPTIONS, URL_ENCODED_OPTIONS },
CORS_OPTIONS,
STATIC_FILES: { OPTIONS: STATIC_OPTIONS, NO_CACHE_TYPES },
} = config.SERVER;
return function load(app, { corsOptions, prerenderToken, staticFiles }) {
// Load useful middlewares
app.use(cookieParser());
app.use(json(JSON_OPTIONS));
app.use(urlencoded(URL_ENCODED_OPTIONS));
app.use(cors(Object.assign({}, CORS_OPTIONS, corsOptions)));
app.use(compression());
if (prerenderToken) {
app.use(prerender.set('prerenderToken', prerenderToken));
}
if (staticFiles) {
const { baseUrl, folderPath } = staticFiles;
app.use(
baseUrl,
express.static(
folderPath,
Object.assign({}, STATIC_OPTIONS, {
setHeaders: (res, path) => {
const mimeType = express.static.mime.lookup(path);
if (NO_CACHE_TYPES.includes(mimeType)) {
res.setHeader('Cache-Control', 'public, max-age=0');
}
},
}),
),
);
}
};
};