【问题标题】:How can I statically serve a react app that has routes in it?如何静态提供包含路由的反应应用程序?
【发布时间】:2020-07-27 16:27:11
【问题描述】:

我有一个在后端运行 Express 的网站,我在其中定义了一个 api 并为我的构建目录提供服务。我的应用如下所示:

function App() {
    return (
        <BrowserRouter>
                <Route path="/" component={Home} exact />
                <Route path="/explore" component={Explore} exact />
        </BrowserRouter>
    );
}

我希望能够将构建目录放入 S3 存储桶,然后将我的 API 请求发送到硬编码位置。

问题是,当我打开 index.html 时,我的和组件不呈现。有哪些可能的解决方案?

【问题讨论】:

标签: reactjs react-router


【解决方案1】:

这是客户端路由的一个常见缺陷,从索引开始导航会起作用,但当用户刷新或从另一个页面启动会话时(例如通过单击链接)会失败。

这是因为不会有任何/explore 页面,因为整个应用程序都捆绑在一个 index.html 文件中。

要使其工作,您必须将 S3 配置为在找不到请求的页面时提供 index.html,方法是将 index.html 设置为错误文档 explained in this answer

【讨论】:

    【解决方案2】:

    尝试改用HashRouter,如下所示:

    import { HashRouter } from 'react-router-dom';
    
    function App() {
        return (
            <HashRouter>
                //your Routes here
            </HashRouter>
        );
    }
    

    【讨论】:

    • 您介意发布HashRouter 的示例吗?这将使这是一个更好的答案。
    【解决方案3】:

    在 S3 管理控制台的静态网站托管下,将错误页面设置为 index.html。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-18
      • 2020-04-29
      • 2016-05-02
      • 1970-01-01
      • 2018-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多