当前位置: 首页 > 知识库问答 >
问题:

如何防止express server为静态文件夹中的api路由提供服务

方鸿振
2023-03-14

嗨,我需要一些关于快车如何处理路线的帮助。

在设置我的express应用程序时,我有以下内容:

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

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

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

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

即使这个文件夹不存在于'public'中,应该由我的API单独处理。仅供参考的是,路由的处理程序仅为GET方法实现,并且在某些时候会被调用。

如何阻止express server同时尝试为静态文件夹中的api请求提供服务?

谢谢。


共有2个答案

叶俊郎
2023-03-14

你的答案是错误的,或者说你曲解了问题。您的原始配置:

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

看起来很好,因为路线之间没有冲突。你链接的线程也不是真的一样,我可以理解为什么在那些情况下移动路由会起作用。

我要说的唯一一件事是,静态文件夹的路径不可靠,您应该使用 ,或者实际上在您的情况下,您可以只使用 -express将推断出应用程序从哪个文件夹提供服务。

督冠玉
2023-03-14

回答我自己的问题。。。它似乎是以下命令的重复:express.static()`从路由中继续路由我的文件

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

简而言之,挂载api路由器的app.use()声明应该出现在告诉express.static从何处提供静态文件的app.use()语句之前。通过这种方式,后者在api路由处理完成后充当一个catchall。路由器引擎订单事项。。。

 类似资料:
  • 问题内容: 所以这很尴尬。我有一个应用程序,该应用程序已集成在一起,现在它只提供一个静态HTML页面,其中包含指向CSS和JS的链接。而且我找不到文档中描述返回静态文件的位置。是的,我可以使用,但是我知道数据没有模板化。我还以为或者是正确的事情,但我不能让这些工作。同时,我正在打开文件,阅读内容,并装配Response具有适当mimetype的: 有人要为此提供代码示例或网址吗?我知道这将变得简单

  • 问题内容: 我正在尝试: 但是它继续提供我static_path中拥有的服务(如上所述,我在两个单独的路径中有两个不同的,但是我希望能够覆盖)。 问题答案: 从应用程序设置中删除。 然后将您的处理程序设置为:

  • 问题内容: 这个问题已经被回答了好几次了,我已经看到了几乎所有相关的帖子,但是无法加载CSS文件。我在我的项目中有以下结构:中,我有以下代码: 在urls.py中,我有以下代码: 我在模板中使用它 我在做什么错?我应该做什么?例如应该在中添加任何内容?或在的设置中?请假设我是一个绝对的初学者。我真的需要一个答案。谢谢。 问题答案: 什么都不做的装饰器类如下所示: 然后您可以正常应用它:

  • 我是Springboot的新手,我正在尝试在其根()路径上显示html页面。我在谷歌上搜索了一下- Spring Boot不提供静态内容 https://spring.io/blog/2013/12/19/serving-statige-web-content-with-spring-boot Spring Boot应用程序不提供静态内容 SpringBoot不提供静态内容 我几乎试了所有的办法,

  • 问题内容: 我有一个应用程序,该应用程序已集成在一起,现在它只提供一个静态页面,其中包含指向CSS和JS的链接。而且我找不到文档中描述返回静态文件的位置。是的,我可以使用,但是我知道数据没有模板化。我还以为或者是正确的事情,但我不能让这些工作。同时,我正在打开文件,阅读内容,并装配具有适当的: 有人要为此提供代码示例或网址吗?我知道这将变得简单。 问题答案: 首选方法是使用nginx或其他Web服

  • 问题内容: 我在具有基本HTTP服务器(没有Express或Connect或类似的东西)的Node服务器上使用Socket.IO。默认情况下,Socket.IO将客户端文件提供给 /socket.io/socket.io.js 我希望能够将该基本路径更改为其他内容,例如 /foo/bar/socket.io/socket.io.js 是否有任何内置方法来执行此操作,或者是否有任何不更改Socket