Universal JS with Server Rendering

Let's now set up server rendering of our component via a simple express server:

  jspm install --dev npm:express

server.js

import express from 'express';
import React from 'react';
import ReactDOMServer from 'react-dom/server.js';
import {HelloWorld} from 'jspm-react-component';

let app = express();
app.get('/', (req, res) => {
  let componentHTML = ReactDOMServer.renderToString(React.createElement(HelloWorld));
  res.send('<!doctype html><body>' + componentHTML);
});

app.listen('8080', () => console.log('Listening on port 8080'));

To run this server we use jspm run:

jspm run server.js
Listening on port 8080

Navigating to http://localhost:8080 in the browser then demonstrates server rendering with JSX support in Node.

With the same configuration and codebase, we are able to run JS universally without any additional effort.

Handling state rehydration is beyond the scope of this tutorial, but can then be implemented using standard techniques.

We won't be using server rendering further here, so we can go ahead and run jspm uninstall express to clean up our app, along with its Node core peer dependencies via jspm uninstall os module http crypto constants child_process assert querystring string_decoder url vm.

To install a NodeJS core library in jspm, use for example jspm install fs --edge to get a requirable fs package that will work both client and server. These core packages are running on alpha so need the --edge flag when installing for this jspm 0.17 beta pending the stable release.