快速正则表达式路由不再知道如何加载静态资产

时间:2019-01-29 03:01:24

标签: node.js regex reactjs express

问题

如何使用正则表达式或Express的内置URL处理器正确加载静态文件?

预期行为

Express应该匹配找到的第一个路由,并像平常一样加载文件。

实际行为

  • 遇到错误,指出静态文件不是正确的MIME类型。
  • 反应的manifest.json未正确加载。

说明

我正在尝试使用React向我的Express路由器指定在哪里可以找到静态文件。到目前为止,我仅用一种解决方案尝试了一些,但这意味着重复同一行两次。现在,我希望使用正则表达式或Express的内置字符串路由处理器将其转换为对.use()方法的单次调用。

当前工作解决方案

app.use('/expressadminarea', express.static(__dirname + '/views')
app.use('/expressadminarea/?*', express.static(__dirname + '/views')

应该应该起作用,但不起作用

app.use(/expressadminarea\/.*|\/expressadminarea/, express.static(__dirname + '/views')

在第二种解决方案中,我告诉Express明确寻找/expressadminarea/< anything or nothing >/expressadminarea。我已经检查了正则表达式,它与我需要的任何路由都匹配,但是由于某些原因,Express不再知道如何加载静态资产,CSS,JS等。返回第一个解决方案以及与之完全相同的路径Express以前一直在搜索以找到现在可以完全加载的静态资产。

我收到的确切错误是:

Error Message

注意事项

  • 我正在使用React查看
    • 构建流程很奇怪,但是我正在运行yarn/npm build的修改版本,该版本将运行正常的构建并将文件移动到我的Express服务器正在寻找的指定/views目录中。
    • 此构建目录未修改,因此所有内部文件/目录与React的常规构建相同。
    • 我已指定React应该先查看<< domain name >>/expressadminarea,然后再尝试使用自定义.env文件加载资产并将PUBLIC_URL="/expressadminarea"放入其中。
    • 我不记得对manifest.json文件进行任何更改,但它似乎是作为错误弹出的,尽管我不认为这是引起任何问题的原因,因此请参考:

manifest.json

{
  "short_name": "React App",
  "name": "Create React App Sample",
  "icons": [
    {
      "src": "favicon.ico",
      "sizes": "64x64 32x32 24x24 16x16",
      "type": "image/x-icon"
    }
  ],
  "start_url": ".",
  "display": "standalone",
  "theme_color": "#000000",
  "background_color": "#ffffff"
}

1 个答案:

答案 0 :(得分:0)


app.use(/\/expressadminarea[\n\r\t\s]*(?:\?.*|$)|\/expressadminarea[\n\r\t\s]*\/.*$/, express.static(__dirname + '/views')