我试着真正理解路由如何在我的react应用程序上使用react-router并在我的node.js服务器上表达 .
反应路由器代码:
import ..
import { Router, Route, IndexRoute, hashHistory, IndexRedirect, Redirect } from "react-router";
render(
<Router history={hashHistory}>
<Redirect from="/" to="/index"/>
<Route path="/" component={App}>
<IndexRoute component={NavBarTop} />
<IndexRoute component={NavFilter} />
<Route path="/index" component={Tickets} />
<Route path="/ticket/:id" component={TicketInformations} />
<IndexRoute component={InterventionsList} />
</Route>
</Router>,
document.getElementById('container'));
我的服务器路由:
app.use('/', express.static(path.join(__dirname, '../client/')), function(res, eq) {
});
app.get('/test', function (req, res) {
console.log("test");
var data = getTickets(); // return a JSON
res.end( data );
});
我的react路由工作完美,但我想进行AJAX调用以填充我的组件 . 为此,我尝试从节点服务器获取JSON . 然而,路径“测试”不起作用 . 我的console.log没有被调用 .
我不知道为什么,我可能没有理解它是如何工作的 . 如何轻松创建web服务来准备我的AJAX调用?
1 回答
ReactJS应用程序是单页面应用程序(SPA),通常它们是从express.js服务器的root("/")提供的 . 但是, unlike 任何静态网页,SPA不会为每次路由更改调用服务器,而是依赖于虚拟路由和它自己的客户端路由处理程序 . (如果你想知道,为什么SPA不刷新页面,这就是背后的原因,有些) . 如果SPA使用其客户端路由处理程序中定义的任何路由,则express将始终将其视为根路由"/"并且不执行任何操作,实际上它赢得了't know anything, as browser won' t任何请求 .
React-Router 为ReactJS应用程序提供这些虚拟路由 .
在您的代码中,当您的React应用程序从"/"转到"/index"或使用React-Router定义的任何其他路由时,它不会请求快递服务器,而是通过客户端/浏览器完成所有操作 . 这就是为什么,即使你有一个为ReactJS定义为"/test"的路由,它也不会为服务器端调用任何东西 .
(顺便说一句,这些虚拟路由也将由React在服务器端使用,当且仅当你使用React的服务器端渲染时 . 但是,express将不知道这些.Express总是表现相同,无论是您使用客户端呈现或服务器端呈现 . )
现在,最后,如果你想要调用你的快速路由"/test",你将不得不对路由进行获取请求,因此将调用该路由 . (看看isomorphic-fetch,如果想知道使用哪个库)
希望这些方便