This node.js application includes a back-end API and a front-end interface.
The back-end API uses express.js to serve JSON at
The server was generated using express-generator.
The front-end interface is a React application.
In production, the build process creates a file called
dist/bundle.js, which the server is configured to recognize. In development mode, the bundle is managed in-memory by webpack-dev-middleware.
The express server recognizes navigation to the root url and serves the react bundle. Navigation between various react components is handled by react-router.
In development, react router is configured to use “hash” urls (e.g.
http://localhost:3000/#/?_k=hpvxlt), and visits to unrecognized urls are handled properly (i.e. a visit to
http://localhost:3000/#/robots/my_bot results in a redirect to the root url with a flash message saying “Couldn’t find robot #my_bot”.
In production, react router is configured to use cleaner-looking urls, (e.g.
https://react-robots.herokuapp.com/robots/new), but unfortunately visits to unrecognized urls result in 404 errors.
src/entry.js, react-related sections of
Flash messaging logic is handled by react components, not the express server.
Integration tests for react components required investigation into various browser testing frameworks. Perhaps the most stable is selenium-webdriver, although it depends on java to run a separate webdriver server.