UNPKG

@shopify/react-server

Version:
53 lines (50 loc) 1.73 kB
import 'cross-fetch'; import Koa from 'koa'; import compose from 'koa-compose'; import mount from 'koa-mount'; import { ping } from '../ping/ping.mjs'; import { requestLogger } from '../logger/logger.mjs'; import { metricsMiddleware } from '../metrics/metrics.mjs'; import { createRender } from '../render/render.mjs'; const logger = console; /** * Create a full Koa server for server rendering an `@shopify/react-html` based React application defined by `options.render` * @param options * @returns a Server instance */ function createServer(options) { const { /* eslint-disable no-process-env */ ip = process.env.REACT_SERVER_IP && process.env.REACT_SERVER_IP !== 'undefined' ? process.env.REACT_SERVER_IP : '0.0.0.0', port = process.env.REACT_SERVER_PORT && process.env.REACT_SERVER_PORT !== 'undefined' ? parseInt(process.env.REACT_SERVER_PORT, 10) : 8081, // a default is set in sewingKitMiddleware assetPrefix = process.env.CDN_URL && process.env.CDN_URL !== 'undefined' ? process.env.CDN_URL : undefined, render, renderError, renderRawErrorMessage = process.env.NODE_ENV === 'development', /* eslint-enable no-process-env */ serverMiddleware, assetName, htmlProps, proxy = false, app = new Koa() } = options; app.proxy = proxy; app.use(mount('/services/ping', ping)); app.use(requestLogger); app.use(metricsMiddleware); if (serverMiddleware) { app.use(compose(serverMiddleware)); } app.use(createRender(render, { assetPrefix, assetName, renderError, renderRawErrorMessage, htmlProps })); return app.listen(port, ip, () => { logger.log(`started react-server on ${ip}:${port}`); }); } export { createServer };