(serverRoutes, port, bindIp, httpsOptions, customMiddlewarePath)
| 61 | // http://host:port/. returns an object with two properties, started and stop; |
| 62 | // see the default function doc for explanation. |
| 63 | const startHtmlServer = (serverRoutes, port, bindIp, httpsOptions, customMiddlewarePath) => { |
| 64 | const server = express(); |
| 65 | const httpServer = httpsOptions ? https.createServer(httpsOptions, server) : http.createServer(server); |
| 66 | let middlewareSetup = (server, rsMiddleware) => { |
| 67 | server.use(compression()); |
| 68 | server.use(bodyParser.urlencoded({ extended: false })); |
| 69 | server.use(bodyParser.json()); |
| 70 | server.use(helmet()); |
| 71 | rsMiddleware(); |
| 72 | }; |
| 73 | |
| 74 | return { |
| 75 | stop: serverToStopPromise(httpServer), |
| 76 | started: new Promise((resolve, reject) => { |
| 77 | logger.info("Starting HTML server..."); |
| 78 | |
| 79 | let rsMiddlewareCalled = false; |
| 80 | const rsMiddleware = () => { |
| 81 | rsMiddlewareCalled = true; |
| 82 | |
| 83 | expressState.extend(server); |
| 84 | |
| 85 | // parse cookies into req.cookies property |
| 86 | server.use(cookieParser()); |
| 87 | |
| 88 | // sets the namespace that data will be exposed into client-side |
| 89 | // TODO: express-state doesn't do much for us until we're using a templating library |
| 90 | server.set('state namespace', '__reactServerState'); |
| 91 | |
| 92 | server.use((req, res, next) => { |
| 93 | reactServer.middleware(req, res, next, require(serverRoutes)); |
| 94 | }); |
| 95 | }; |
| 96 | |
| 97 | if (customMiddlewarePath) { |
| 98 | const customMiddlewareDirAb = path.resolve(process.cwd(), customMiddlewarePath); |
| 99 | middlewareSetup = require(customMiddlewareDirAb).default; |
| 100 | } |
| 101 | |
| 102 | middlewareSetup(server, rsMiddleware); |
| 103 | |
| 104 | if (!rsMiddlewareCalled) { |
| 105 | console.error("Error react-server middleware was never setup in custom middleware function"); |
| 106 | reject("Custom middleware did not setup react-server middleware"); |
| 107 | return; |
| 108 | } |
| 109 | |
| 110 | httpServer.on('error', (e) => { |
| 111 | console.error("Error starting up HTML server"); |
| 112 | console.error(e); |
| 113 | reject(e); |
| 114 | }); |
| 115 | httpServer.listen(port, bindIp, (e) => { |
| 116 | if (e) { |
| 117 | reject(e); |
| 118 | return; |
| 119 | } |
| 120 | logger.info(`Started HTML server over ${httpsOptions ? "HTTPS" : "HTTP"} on ${bindIp}:${port}`); |
no test coverage detected
searching dependent graphs…