我的主页路由 ( / ) 的初始服务器渲染工作正常。
此外,随后的客户端导航到 ( /#/page2 ) 工作正常。
但是,如果我直接从地址栏加载 /#/page2,则服务器渲染的主页首先会在浏览器中加载,然后明显转换到 /#/page2,这不是我想要的。我只想显示 /#/page2 而无需先刷新主页。
发生的事情是该节点正在为对 / 的请求提供主页,然后当响应到达客户端时,客户端正在运行 /#/page2 的路由处理程序。两者的行为都正确。但这不是我想要的。
我该如何避免这种行为?
我认为我需要一种让服务器和客户端都知道不同路由并且都能够处理它们(同构)的方法,但是,服务器不知道 url 的片段部分。
其他人有这个问题吗?
这个问题不是特定的反应。它是特定于 SSR 的深层链接。
我的节点路由器处理“/”如下
router.get('/', function(req, res) {
var React = require('react');
var Router = require('react-router');
var Routes = require("../app/clapi-routes.jsx");
var router = Router.create({location: req.url, routes: Routes});
router.run(function(Handler, state) {
var html = React.renderToString(<Handler/>);
return res.render('index.ejs', {html:html});
})
});
index.ejs 只是:
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="/css/json-inspector.css"/>
</head>
<body style="margin:0">
<%- html %>
<script src="/build/bundle.js"></script>
</body>
</html>