The answers here are all extremely helpful, what worked for me was configuring my Webpack server to expect the routes.
devServer: {
historyApiFallback: true,
contentBase: './',
hot: true
},
The historyApiFallback is what fixed this issue for me. Now routing works correctly and I can refresh the page or type in the URL directly. No need to worry about work arounds on your node server. This answer obviously only works if you're using webpack.
EDIT: see my answer here for a more detailed reason why this is necessary: https://stackoverflow.com/a/37622953/5217568