javascript - 如何使用 React Router 覆盖 Express API 路由
问题描述
我有一个使用 React Routes 的应用程序,它的构建由 Express 服务器提供,我也有用于 API 调用的路由。
服务器.js
const express = require('express')
const path = require('path');
const app = express()
// Serving Static Files and React
app.use(express.static(path.join(__dirname, 'client/build')));
app.get('*', function(req, res) {
res.sendFile(path.join(__dirname, 'client/build', 'index.html'));
});
app.use('/api/files', require('./routes/files'))
app.use('/api/apartments', require('./routes/apartments'))
app.use('/api/keys', require('./routes/keys'))
app.use('/api/guests', require('./routes/guests'))
app.use('/api/transfers', require('./routes/transfers'))
app.use('/api/logs', require('./routes/logs'))
app.use('/api/auth', require('./routes/auth'))
const PORT = process.env.PORT || 5000
app.listen(PORT, () => console.log(`Server started on port ${PORT}`))
它工作正常,直到我转到http://localhost:5000/api/apartments - 它使应用程序崩溃并从 API 返回空白 JSON(但我猜这是合乎逻辑的)
我在路由器中设置了处理 404。如果你去http://localhost:5000/api/它将导致 React App 中的 404。
应用程序.js
<Switch>
<Route exact path='/' component={Home} />
<Route exact path='/login' component={Login} />
<Route exact path='/auth' component={Auth} />
<Route exact path='/guest' component={Guest} />
<PrivateRoute exact path='/guests/list' component={GuestList} />
<PrivateRoute exact path='/apartments/' component={Apartments} />
<PrivateRoute exact path='/apartments/:name' component={Apartment} />
<PrivateRoute exact path='/keys' component={Keys} />
<PrivateRoute exact path='/logs' component={Logs} />
<PrivateRoute exact path='/manager' component={Manager} />
<PrivateRoute exact path='/upload' component={UploadForm} />
<Route component={ErrorPage} />
</Switch>
是否可以使 /api/apartments 将 404 处理为 React 应用程序,或者通过单独的服务器提供静态构建是更正确的方法?
解决方案
创建错误路由并从服务器重定向。
<Switch>
<Route exact path='/' component={Home} />
<PrivateRoute exact path='/manager' component={Manager} />
<PrivateRoute exact path='/upload' component={UploadForm} />
<Route exact path='/404' component={ErrorPage} />
</Switch>
// 应用程序.js
//The 404 Route (ALWAYS Keep this as the last route)
app.get('*', function(req, res){
res.redirect('/404');
});
推荐阅读
- reactjs - 如何更改 a 的可用值
- r - 在 R 中向 Leaflet 应用程序添加响应式侧边栏
- azure - 将 ACR 用作容器资源
- matlab - 具有向量输入的 Simulink MATLAB 功能块
- linq - 我更改了一些表,更新了 EDMX 模型,一些表“丢失”了
- verilog - 如何在verilog中使用触发信号在N个周期后将信号设置为高电平?
- kubernetes - io.k8s.api.core.v1.ContainerPort.containerPort 的 Kubernetes ValidationError 无效类型:得到“字符串”,预期“整数”;
- git - 当我取消暂存时文件消失了,为什么?
- java - 如何使用 arrayAdapter 的意图进入第三个活动?
- react-native - 添加redux-persist后应用打开后白闪白屏死机