我想将我的应用从 1.0 移到 react-router 2.0. 我试图在快递上做服务器端渲染。

server.js 代码(1.0)(正常工作)

var routes = require('./public/js/app.node.js');

app.get('*', function(req, res, next) {

  var location = new Location(req.path, req.query);

  try {
    Router.run(routes(), location, function(e, i, t) {
      var str = React.renderToString(
                  React.createElement(Router, i));
    });
  } catch(e) {
    return next();
  }
});

server.js 代码(2.0)(不工作)

var routes = require('./public/js/app.node.js');

app.get('*', function(req, res, next) {

  var location = new Location(req.path, req.query);

  try {
  match({routes, location: req.url} , function (error, redirectLocation, renderProps) {
      if (error) {
        res.status(500).send(error.message);
      } else if (redirectLocation) {
        res.redirect(302, redirectLocation.pathname + redirectLocation.search);
      } else if (renderProps) {
        var str = renderToString(React.createElement(RoutingContext, renderProps));
        res.status(200).send(str);
      } else {
        res.status(404).send('Not found');
      }
  });
}

routes.jsx:

export default (withHistory, onUpdate) => {

  return (
    <Provider store={store}>
      <Router history={history} onUpdate={onUpdate}>
        <Route path='/' component={BarcodeListing} />
      </Router>
    </Provider>
  );
};

上面的代码与/不匹配。这是为什么。 console.log(req.url)给我/,然后/在路线上应该 req.url 匹配 req.url 对!!