我想将我的应用从 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 对!!