【问题标题】:Express wildcard GET breaks routing to React appExpress 通配符 GET 中断路由到 React 应用程序
【发布时间】:2017-05-02 18:20:23
【问题描述】:

我正在从这个 React-Webpack 样板代码库 (https://github.com/wallacyyy/webpack-heroku/blob/master/server.js) 开始开发我的项目。一切都按预期工作,但现在,我想在我的 React 应用程序中实现路由,为此,我必须将以前的文件 (server.js) 修改为以下内容:

而不是:

app.get('/', function (_, res) { res.sendFile(indexPath) })

我用:

app.get('*', function (_, res) { res.sendFile(indexPath) }) 

只要我做这个改变,一切都会中断,React 应用程序不再呈现。我唯一得到的是浏览器中的错误:bundle.js:1 Uncaught SyntaxError: Unexpected token <,如果我尝试查看bundle.js 的内容,我会得到index.html 的内容。

知道为什么 express 的通配符路由会破坏 React 应用程序吗?

【问题讨论】:

  • 听起来这样做会破坏资产的正常服务,例如 bundle.js。如果您使用 nginx 提供静态资产,然后将其他所有内容代理到节点,则不会发生这种情况。另一个“修复”是确保您的静态文件路由位于通配符之前。
  • 你能告诉我如何实现后者吗?
  • 您是否尝试过从 publicPath 而不是 indexPath 加载它?为此,您需要将
    添加到 publicPath index.html。我想知道是否像凯文所说的那样与渲染静态文件有关。
  • index.html 在公共目录之外。我认为问题在于 webpack 存储结果的位置,因为我使用的是webpackDevMiddleware
  • 作为更新,我还尝试将index.html 移动到public 目录中并将res.sendFile 指向那里,但结果没有改变。

标签: javascript node.js reactjs express webpack


【解决方案1】:

根据this commentwebpack-hot-middleware 配置需要在* 处理程序之前,以便它可以匹配路径。找出这些信息后,修复非常简单,我将webpack-hot-middleware 的配置移到了 GET 处理程序之前。

【讨论】:

    猜你喜欢
    • 2018-05-30
    • 1970-01-01
    • 2018-06-09
    • 2015-05-10
    • 1970-01-01
    • 2017-12-07
    • 2021-05-12
    • 2014-11-25
    • 2020-11-30
    相关资源
    最近更新 更多