React Routing工作在本地而不是Heroku
如果这个问题与本文所概述的不完全一样,我的问题就非常相似。 不幸的是,我无法使用它提供的策略来解决它。 所以这里是我自己的细节:
我正在使用创buildReact应用程序 , 反应路由器4 , Express和Heroku,并按照这里的说明build立与CRA的服务器。
在本地,我可以访问诸如myapp/about
路线,但在build立并推送到heroku之后,这些404。
我可以通过UI导航到这条路线(例如,通过点击将路线推入history
的菜单项),但是仅使用浏览器的地址栏无法导航到此路线。 此外,当我使用用户界面进行导航时,我没有看到与路线相关的任何networking活动,例如/about
请求。 然而,当我改变地址栏,然后按回车,这产生了一个networking请求到上述路线。
以下是我的代码中的一些select片段:
app.js
<Switch> <Route exact path="/about" component={About} /> <Route path="/" render={props => <coolListContainer {...props}/>} /> </Switch>
server.js
if (process.env.NODE_ENV === 'production') { app.use(express.static('client/build')); } //...what some of my api routes look like: app.route('/api/verify') .post( async (req, res) => { try { await db.verifyCode(req.body) res.json('success') } catch (err) { res.json(err); } } });
我的目录结构由full-stack-react`的快速演示提供 。
└── myapp ├── Procfile ├── README.md ├── client │ ├── build │ │ ├── asset-manifest.json │ │ ├── index.html │ │ └── static │ │ ├── css │ │ │ ├── main.e8c50ca0.css │ │ │ └── main.e8c50ca0.css.map │ │ └── js │ │ ├── main.24fe0ebe.js │ │ └── main.24fe0ebe.js.map │ ├── package.json │ ├── public │ │ └── index.html │ ├── src │ │ ├── About.js │ │ └── index.js │ └── styles │ └── about..css ├── package.json ├── server.js └── static.json
根据这篇文章的回答,我还将一个static.json
文件放入根目录。
static.json
{ "root": "client/build/", "clean_urls": false, "routes": { "/**": "index.html" } }
上面的configuration给我在任何路线上的404s。
好吧,我明白了这一点。
我所需要的只是确保任何与我的内部API不相关的请求(例如通过地址栏的GET
请求)直接路由到我的index.html
文件,该文件通过React Router处理dynamic路由。 现在看起来很明显。
这是我的app.js
的最终路线:
app.get('*', (req, res) => { res.sendFile(path.join(__dirname, '/client/build/index.html')); });
- 在WebStorm中创build反应应用程序
- 使用Express创build反应应用程序
- 在创build反应应用程序项目上进行快速身份validation
- create-react-app-typescript:error TS2304:找不到名字'require'
- 如何用npm脚本在css文件中编辑相对path?
- 设置代理服务器创build反应的应用程序
- 即使使用新build的应用程序,create-react-app的“npm start”也不起作用。 在chokidar node_module中抛出错误
- 创build – 反应 – 应用程序npm运行构build太慢
- 在create-react-app项目中增加JavaScript堆大小