UNPKG

@ewizardjs/prerenderer

Version:

Fast, flexible, framework-agnostic prerendering for sites and SPAs.

55 lines (41 loc) 1.43 kB
const express = require('express') const proxy = require('http-proxy-middleware') const path = require('path') class Server { constructor (Prerenderer) { this._prerenderer = Prerenderer this._options = Prerenderer.getOptions() this._expressServer = express() this._nativeServer = null } initialize () { const server = this._expressServer if (this._options.server && this._options.server.before) { this._options.server.before(server) } this._prerenderer.modifyServer(this, 'pre-static') server.get('*', express.static(this._options.staticDir, { dotfiles: 'allow' })) this._prerenderer.modifyServer(this, 'post-static') this._prerenderer.modifyServer(this, 'pre-fallback') if (this._options.server && this._options.server.proxy) { for (let proxyPath of Object.keys(this._options.server.proxy)) { server.use(proxyPath, proxy(this._options.server.proxy[proxyPath])) } } server.get('*', (req, res) => { res.sendFile(this._options.indexPath ? this._options.indexPath : path.join(this._options.staticDir, 'index.html')) }) this._prerenderer.modifyServer(this, 'post-fallback') return new Promise((resolve, reject) => { this._nativeServer = server.listen(this._options.server.port, () => { resolve() }) }) } destroy () { this._nativeServer.close() } } module.exports = Server