【发布时间】: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