UNPKG

@statusfy/core

Version:
86 lines (70 loc) 1.89 kB
const express = require("express"); const bodyParser = require("body-parser"); const cors = require("cors"); const helmet = require("helmet"); const { Nuxt } = require("nuxt"); const language = require("./middlewares/language"); const sitemap = require("./extra/sitemap"); const feeds = require("./extra/feeds"); const calendar = require("./extra/calendar"); const buildApiRouter = require("./api"); /** * Create the base Server App * * @param {Object} siteConfig - User Site Configuration. * @param {import("@nuxt/types").Configuration} nuxtConfig - Nuxt Configuration. * @param {string} host - Server Host. * @param {string} port - Server Port. * @param {string} [apiPrefix=""] - API prefix. */ module.exports = async function createApp( siteConfig, nuxtConfig, host, port, apiPrefix = "" ) { const app = express(); if (port) { app.set("port", port); } if (host) { app.set("host", host); } // Save Config app.use((req, res, next) => { req.app.set("siteConfig", siteConfig); next(); }); if (nuxtConfig && !nuxtConfig.dev) { app.use( helmet({ dnsPrefetchControl: false }) ); } app.use(cors()); // parse application/json app.use(bodyParser.json()); app.use(language); if (nuxtConfig && nuxtConfig.statusfy.publicFilesPath) { app.use(require("serve-static")(nuxtConfig.statusfy.publicFilesPath)); } app.use("/sitemap.xml", sitemap); app.use(feeds); app.use(calendar); app.use(`${apiPrefix}/api/v0`, buildApiRouter(siteConfig)); if (nuxtConfig) { // Init Nuxt.js const nuxt = new Nuxt(nuxtConfig); // Build only in dev mode if (nuxtConfig.dev) { const { Builder } = require("nuxt"); const builder = new Builder(nuxt); await builder.build(); } // Give nuxt middleware to express app.use(nuxt.render); } return app; };