javascript - 手动输入 URL 时,MERN 路由器链接不起作用
问题描述
我将我的 MERN 堆栈应用程序部署到 heroku,但是当我手动输入 url 路径时,路由器路径不起作用。这是我的节点服务器:
const express = require('express');
const path = require('path');
const connectDB = require('./config/db');
const app = express();
// //connect DB
connectDB();
app.use('/api/poll', require('./routes/api/poll'));
if(process.env.NODE_ENV === 'production'){
app.use(express.static( 'client/build' ));
app.get('*', () => {
res.sendFile(path.join(__dirname, 'client', 'build', 'index.html')); //relative path
});
}
const PORT = process.env.PORT || 5000
app.listen(PORT, () => console.log(`Server started ${PORT}`));
这是反应中的路由器:
<Router>
<Fragment>
<Navbar />
<Switch>
<Route exact path="/" component={Landing} />
<Route exact path="/create" component={CreatePoll} />
<Route exact path="/search" component={Search} />
<Route exact path="/404" component={NoMatch} />
<Route exact path="/:id" component={Poll} />
<Route exact path="/:id/results" component={Results} />
</Switch>
<NotificationContainer />
</Fragment>
</Router>
基本上,如果我在浏览器 url 中输入路径名,例如 baseUrl/poll/vote,它就不起作用。只有当我输入链接时它才会这样做。如果我通过我的应用重定向到达该路径,那么它可以工作。
解决方案
Router
需要是 的实例HashRouter
,而不是BrowserRouter
。
import {BrowserRouter as Router} from 'react-router';
BrowserRouter
需要在后端进行特殊配置和考虑,以处理对实际上应该由前端处理的路由的网络请求。
HashRouter
更容易使用,因为它#
在 URL 中插入了一个,有效地将所有页面请求发送到相同的基本路由,而服务器不需要做任何特殊的事情。
推荐阅读
- java - java.lang.NoClassDefFoundError: gherkin/IGherkinDialectProvider 在运行 Selenium-Cucumber 测试时
- grammar - 语法中空格方法ws的默认定义
- html - 如何将 swf 文件嵌入到网站上的浮动 iframe 中。书签?
- python - 使用 re 替换数组的一部分
- sql-server - 尝试使用 SQL Server 后端分发访问应用程序
- django - 为什么迁移不起作用,它既不会在 django 应用程序中创建迁移目录
- android - 在android中滚动底部工作表的问题
- c# - 如何仅 Ping IPv4?
- python - 如何以真正的并发方式运行多个 PyQt QTimers?
- php - 升级到 laravel 5.8 后数据库访问错误