This project is not actively maintained. Proceed at your own risk!
Middleware for building full page apps using React, JSX, and CommonJS.
If you want to get started with server rendered React apps, go directly to react-page. This project is the implementation of the router/server-side-page-assembler/packager.
###Features
- Server-side JavaScript rendering of pages/apps using React.
- Pages rendered on server, seamlessly brought to life in the browser.
- No special glue code to write - "Just works" on client/server.
- CommonJS + React + optional JSX.
###Requirements
- node (a more recent version)
- npm
###Install
Let npm do all the installing - just create a directory structure anywhere as follows:
yourProject/
├── package.json # Add npm dependencies here.
├── server.js # Start web server with `node server.js`
└── src # All your application JS.
├── index.js # localhost:8080/index.html routed here
└── pages # Configure the page root using pageRouteRoot
└── about.js # localhost:8080/about.html
List your dependencies in
package.json
:
// Shows how to depend on bleeding edge versions. One niceness of
// `react-page-middleware`, is depending on the main React repo as
// `require('React')` Not all JS packagers understand the pure git repo for
// React.
"dependencies": {
"React": "git://github.com/facebook/react.git",
"react-page-middleware": "git://github.com/facebook/react-page-middleware.git",
"connect": "2.8.3"
},
Download your project's dependencies:
cd yourProject
npm install
Create a
server.js
file that requiresreact-page-middleware
, and set the proper directory search paths and routing paths.
var reactMiddleware = require('react-page-middleware');
var REACT_LOCATION = __dirname + '/node_modules/react-tools/src';
var ROOT_DIR = __dirname;
var app = connect()
.use(reactMiddleware.provide({
logTiming: true,
pageRouteRoot: ROOT_DIR, // URLs based in this directory
useSourceMaps: true, // Generate client source maps.
projectRoot: ROOT_DIR, // Search for sources from
ignorePaths: function(p) { // Additional filtering
return p.indexOf('__tests__') !== -1;
}
}))
.use(connect['static'](__dirname + '/src/static_files'));
http.createServer(app).listen(8080);
Run the server and open index.html:
node server open http://localhost:8080/index.html
The react-page project has a much more thorough explanation of the motivation and features.
The default router is JavaScript-centric. You simply specify the path to the JS component you want to use to render the entire page. react-page for more information about the routing.
react-page-middleware
has them.
Just hit your browser's refresh button to run an always-up-to-date version of your app.
- Dynamically packages/compiles your app on each server request.
react-page-middleware
is a rapid development environment where you can experiment with
entirely new ways of building production web apps powered by React. It provides
a common environment that allows sharing of modules client/server architecture
prototypes.
In order to use this technology in a production environment, you would need to audit and verify that the server rendering strategy is safe and suitable for your purposes.
-
In particular, you would want to ensure that a proper server sandbox is enforced. However,
react-page
does run your UI rendering code inside of contextify as a preliminary sandbox. -
The packaging/transforming features of
react-page
would not be needed in a production environment where the packages can be prebuilt once, stored in a CDN and not be repackaged on the fly, but the server rendering feature is very compelling for production environments where page load performance is of great concern. -
Among other things, additional connect middleware should be added to prevent stack traces from showing up in the client.