【发布时间】:2019-06-16 10:51:16
【问题描述】:
我正在为使用 React-Router v4 的 React 应用程序设置服务器后端。到目前为止,我已经设置了 Express,以便将任何请求重定向到 index.html,从而允许 React Router 完成其余的工作。这适用于路由'/beats'、'/loops'、'/kits' 等。当 url 中有多个目录时会出现问题,例如 url '/beats/1/name-of-beat' (在 react- 中解析为 '/beats/:id/:name?'路由器)。
使用此快递代码:
app.use(express.static(path.join(__dirname, '../frontend/build')));
app.get('/*', (req, res) => {
res.sendFile(path.join(__dirname, '../frontend/build/index.html'));
});
这会将所有到 /kit、/beats 等的请求重定向到 index.html,并且所有 <script> 源仍然可以工作。但是,当尝试访问'/beats/1/name' 时,会提供 index.html,但 <script> 标记也会提供 index.html,导致 index.html 在浏览器中加载但没有 javascript。
如果我在 url 中添加除第一个目录之外的任何其他目录,则会发生这种情况,因此 '/beats/example' 或 '/beats/1/2/3' 但不适用于 '/example'(这将正确显示在 react-router 中配置的 404)。
如果需要,这里是路由器代码:
<Router>
<div className="App">
<Header />
<Switch>
<Route exact path="/" component={Home} />
<Route path="/kits" component={Kits} />
<Route exact path="/beats" component={Beats} />
<Route path="/beats/:id/:beatName?" component={SoundPage} />
<Route path="/loops" component={Loops} />
<Route path="/contact" component={Contact} />
<Route component={NoMatch} />
</Switch>
</div>
</Router>
这是构建的 index.html 脚本标签:
<script src="./static/js/1.731b4af1.chunk.js"></script>
<script src="./static/js/main.498cadba.chunk.js"></script>
这是项目结构:
-frontend
-build
-static
-index.html
-src
-public
-backend
-server.js
【问题讨论】:
标签: node.js reactjs express server react-router