import express from 'express'; import * as React from 'react'; import * as ReactDOMServer from 'react-dom/server'; import CssBaseline from '@mui/material/CssBaseline'; import { ThemeProvider } from '@mui/material/styles'; import { CacheProvider } from '@emotion/react'; import createEmotionServer from '@emotion/server/create-instance'; import createEmotionCache from './createEmotionCache'; import App from './App'; import theme from './theme'; function renderFullPage(html, css) { return ` My page ${css}
${html}
`; } function handleRender(req, res) { const cache = createEmotionCache(); const { extractCriticalToChunks, constructStyleTagsFromChunks } = createEmotionServer(cache); // Render the component to a string. const html = ReactDOMServer.renderToString( {/* CssBaseline kickstart an elegant, consistent, and simple baseline to build upon. */} , ); // Grab the CSS from emotion const emotionChunks = extractCriticalToChunks(html); const emotionCss = constructStyleTagsFromChunks(emotionChunks); // Send the rendered page back to the client. res.send(renderFullPage(html, emotionCss)); } const app = express(); app.use('/build', express.static('build')); // This is fired every time the server-side receives a request. app.use(handleRender); const port = 3000; app.listen(port, () => { console.log(`Listening on ${port}`); });