【发布时间】:2019-05-21 17:54:32
【问题描述】:
我继承了一个静态网站的框架,该框架使用 react 和 react-router-dom 作为路由。我们希望网站能够支持通过 id 将内容动态加载到页面上。
例如,我有一个列出所有文章的 /articles 页面,当您单击列出的文章之一时,它会打开 URL /articles/ABCDEFG,然后加载文章页面组件并获取该特定文章的数据ID。这完全适用于本地开发人员,但是一旦我部署到生产环境(托管为 Azure 网站应用程序),除了具有动态 URL 的页面之外,所有页面都可以正常工作。
我对 react 还很陌生,但是根据我的阅读,静态反应站点不能使用 /:id,因为它要求每个页面都已经存在。
我进行了搜索并尝试从服务器和 webconfig 中删除任何与静态相关的内容。
var express = require('express');
var serveStatic = require('serve-static');
var fallback = require('express-history-api-fallback');
var app = express();
var publicDir = path.resolve(__dirname, '../www');
// app.use('/', serveStatic(publicDir));
//app.use(fallback('index.html', { root: publicDir }));
app.listen(process.env.PORT);
我的路线是这样设置的
generateRoutes() {
return (
<Switch>
<Route exact path="/" component={Home} />
<Route exact path="/about" component={About} />
<Route exact path="/articles" component={Articles} />
<Route path="/articles/:id" component={Article} />
<Route exact path="/careers" component={Careers} />
<Route exact path="/people" component={People} />
<Route path="/profile/:id" component={Profile} />
</Switch>
);
}
我想要的是,当我将一个 url 放入地址栏中时,例如 https://example.com/site/profile/246b9e73-5332-4afb-92b8-be5a061bd908,它会呈现带有该 ID 的个人资料页面。
相反,我收到一个 404 表示找不到该页面。我不确定我是否正在用静态/动态的想法追逐一个兔子洞,但我花了大约 2 天时间试图弄清楚为什么到目前为止这不起作用,我愿意尝试任何事情。
【问题讨论】:
-
我确定您的代码 sn-p 中的注释行是输入错误。如果没有,请取消注释并尝试查看它是否有效。
-
您的 express 服务器需要在所有路由上呈现应用程序 (index.html)(或一个包罗万象的
*),否则您将无法运行 JS / react-router -
@JohnRuddell : 没必要,如果使用 express-history-api-fallback,它基本上做同样的事情。
-
确定后备是否没有被注释掉:)
-
另外你说你的url路径是/site/profile/246b...但是你的路由器只设置为/profile/:id
标签: reactjs azure-web-app-service react-router-dom