【问题标题】:How to prevent express server from serving api routes from the static folder如何防止快速服务器从静态文件夹提供 api 路由
【发布时间】:2018-03-12 10:09:28
【问题描述】:

您好,我需要一些关于 express 如何处理路线的帮助。

在设置我的快递应用时,我有这样的事情: app.use(express.static('public'));

接下来,我挂载了一些api路由:

app.use('/api', myrouter);
app.get('*', function(req, res) {
    res.sendFile(path.resolve('public/index.html'));
});

但是,当前端通过 api 路由请求数据时,例如在“localhost:3000/api/things”处,我在 Express 调试日志中看到,在某个时间点(不确定何时)它实际上尝试将此请求作为静态文件提供服务,例如: p>

send stat "C:\myproject\public\api\things" +230ms

即使此文件夹在“公共”中不存在,并且应该由我的 api 单独处理。仅供参考,/api/things 路由的处理程序仅针对 GET 方法实现,并且在某些时候会被调用。

如何阻止 express server 也尝试从静态文件夹提供 api 请求?

非常感谢。

【问题讨论】:

    标签: node.js express routes


    【解决方案1】:

    回答我自己的问题......这似乎是这个问题的重复: `express.static()` keeps routing my files from the route

    所以答案是这个:https://stackoverflow.com/a/28143812/8670745

    简而言之,挂载 api 路由器的 app.use() 声明应该出现在 之前 app.use() 语句告诉 express.static 从哪里提供静态文件。这样,后者在 api 路由处理完成后充当包罗万象的角色。路由器引擎顺序很重要...

    【讨论】:

      【解决方案2】:

      您的回答有误,或者您误解了问题。您的原始配置:

      app.use(express.static(__dirname + 'public'));
      app.use('/api', myrouter);
      

      看起来非常好,因为路线之间没有冲突。您链接的线程也不太一样,我明白为什么在这些情况下移动路线会起作用。

      我要说的唯一一件事是你的静态文件夹的路径不可靠,你真的应该使用path.join,或者实际上在你的情况下你可以只做express.static('public') - express 会推断你的应用程序的文件夹来自。

      【讨论】:

      • 实际上......我现在在我的项目中拥有的是express.static('public'),就像你建议的那样......我不确定为什么我在问题中有__dirname;会更正。无论如何:即使使用更简单的形式,当 express.static 行出现在 api 路由器挂载之前 时,我会看到带有 api 路径的 express debug send stat ... 行。除非那只是表达“思考”,实际上并没有提供任何服务。如果是这样,这个问题没有实际意义,应该删除。我可能还有其他问题,现在已经神奇地自行解决了。
      • @yen well express 在内部使用正则表达式来匹配路由,因为您的静态路由位于应用程序的根目录上,也许这就是问题所在 - 任何路由都会有效匹配(因为它会解析为 /)。 FWIW 看起来像一个 statsd 记录器,请尝试打开 debug logging 以更详细地了解实际情况。我是
      猜你喜欢
      • 2017-08-16
      • 2021-12-10
      • 2018-09-04
      • 2013-09-27
      • 2020-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多