@before.js/server
Version:
Enables data fetching with any React SSR app that uses React Router 5
74 lines (58 loc) • 2.09 kB
Markdown
//img.shields.io/badge/flybondi-fdbe15.svg?logo=javascript&style=flat-square&logoColor=grey&logoWidth=20)](https://flybondi.com)
[](https://github.com/semantic-release/semantic-release)
[](https://github.com/Flet/semistandard)
[](https://github.com/prettier/prettier)
```sh
yarn add @before/server
yarn add @loadable/server react react-dom react-router-dom react-helmet
```
```js
// ./src/routes.js
import { asyncComponent } from '@before/client';
import loadable from '@loadable/component';
const Placeholder = () => <div>Loading</div>;
const HomeContainerLoader = /* #__LOADABLE__ */ () =>
import(/* webpackChunkName: "home" */ './pages/HomeContainer/HomeContainer.page');
const routes = [
{
path: '/',
exact: true,
component: asyncComponent({
LoadableComponent: loadable(HomeContainerLoader, { fallback: Placeholder }),
loader: HomeContainerLoader
})
}
];
export default routes;
```
```js
// ./src/server.js
import express from 'express';
import { render } from '@before/server';
import routes from './routes';
const assets = require(process.env.ASSETS_MANIFEST);
const server = express();
server
.disable('x-powered-by')
.use(express.static(process.env.PUBLIC_DIR))
.get('/*', async (req, res) => {
try {
// Pass document in here.
const html = await render({
req,
res,
routes,
assets,
statsPath
});
res.send(html);
} catch (error) {
res.json(error);
}
});
export default server;
```
**Before.js** use [loadable-components](https://www.smooth-code.com/open-source/loadable-components/docs/getting-started/) to support server-side chunks/code-split.
[![js-flybondi](https: