【问题标题】:Why does my express wildcard route override my static middleware?为什么我的快速通配符路由会覆盖我的静态中间件?
【发布时间】:2017-03-30 05:25:05
【问题描述】:

我遇到了 Express v.4.14 的问题。我的通配符路由似乎覆盖了我的静态中间件。代码如下:

    const app = express()
    const indexPath = path.join(__dirname, './index.html')
    const publicPath = express.static(path.join(__dirname, './public'))

    app.use('/public', publicPath)
    app.get('/*', function(req, res) { res.sendFile(indexPath); });

    return app

出于某种原因,对“/public/SomeExistingFile.js”的请求会返回“/index.html”。如果我删除通配符 (*),则静态中间件不会被覆盖,但我不再匹配任意路由。

非常感谢任何帮助!

Extra Context:我正在尝试使用 Webpack 为带有 React、React Router 和 Redux 的单页 Web 应用程序提供服务。

【问题讨论】:

  • 在路由定义后添加app.use('/public', publicPath) 可能会有所帮助。
  • 感谢您的建议。不幸的是,我遇到了同样的问题:所有请求都被定向到“/index.html”,包括对“/public/SomeExistingFile.js”的请求
  • 我尝试了类似的方法并为我工作,也许您未包含在帖子中的某些代码导致了问题。

标签: node.js express


【解决方案1】:

您正在使用 /* 它将所有路由仅路由到该路由。所以你可以在 /* 之前添加一些路径,比如 mypath/* 这样它就不会覆盖你的静态路径

【讨论】:

  • 我的印象是静态中间件会捕获到“/public/*”的路由。当我不使用通配符路由时就是这种情况,但我打算保留通配符路由以捕获所有不路由到“/public/*”的路由
猜你喜欢
  • 2017-04-04
  • 2022-01-15
  • 2020-04-22
  • 2020-10-22
  • 2018-04-01
  • 2012-10-15
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多