如何使 Express 路由通配符不捕获 404 的静态文件?

查尔斯·兰德尔

我现在正在处理我的 Express 应用程序中反复出现的问题,即如果请求一个不存在的静态文件,我的应用程序将返回我的默认索引作为该文件。

我在 app.js 中路由的简短版本是这样的:

const index = require('./routes/index');

app.use(express.static(path.join(__dirname, 'public')));
app.use('/*', index);
app.use((req, res, next) => {
  console.log("DIDN'T FIND A FILE");
  const err = new Error('Not Found');
  err.status = 404;
  next(err);
});

问题是我永远不会得到错误或打印,因为通配符将始终为我的索引路由器服务。

服务器为请求报告 200,在客户端我得到内容为 index.html 的丢失文件。

我想要通配符,以便我可以将错误的 url 重定向到主页。这里唯一的解决方案是在请求上运行正则表达式并猜测它是否应该是一个文件然后手动返回 404?

标记

我能看到这种工作的唯一方法是,如果您以某种方式表示知道哪些 url 应该是静态文件,哪些应该由您的通配符处理。

例如,给定 path: /not_a_file,静态中间件将在 public 文件夹中查找并找不到它。那么这是404通配符处理的一个或其他东西吗?

这可能不是您所希望的,但解决此问题的一种方法是将所有静态文件放在特定路径上并使用该fallthrough选项。例如,如果您像这样设置静态:

app.use('/static', express.static(path.join(__dirname, 'public'), {fallthrough:false}));

现在,/static/index如果索引存在,/static/not_hererequests将为索引提供服务,并且会导致您的错误。您的通配符将接收对所有其他路径的请求。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Express.js(Node.js):静态文件服务如何真正起作用?

来自分类Dev

在Express中使用*路由时,从不存在的静态内容中发送404标头

来自分类Dev

Flask静态文件获取404

来自分类Dev

NginX代理Nodejs / Express-静态文件上的404

来自分类Dev

Express找不到静态文件

来自分类Dev

节点/ Express-静态服务不起作用/如何使用带有静态服务文件的路由

来自分类Dev

节点/ Express,如何修改静态文件但仍然可以访问req.params?

来自分类Dev

Express JS获取目录中所有静态文件的404

来自分类Dev

使用NGINX提供静态文件时,如何使用Node.js的404响应?

来自分类Dev

Express-无法投放静态文件(404错误)

来自分类Dev

Express的静态文件

来自分类Dev

捕获所有路由而不捕获静态文件

来自分类Dev

烧瓶静态文件给404

来自分类Dev

如何使用Django和Nginx解决404静态文件的问题?

来自分类Dev

通过Nginx提供静态文件时如何修复404错误

来自分类Dev

如何设置nginx来解决在静态文件vue上找不到的404?

来自分类Dev

Express如何/在何处确定静态文件的内容类型

来自分类Dev

IIS / Server 2019上的Blazor静态文件404错误,但IIS Express / Win10没有

来自分类Dev

如何使用Django和Nginx解决404静态文件的问题?

来自分类Dev

静态路由返回404?

来自分类Dev

Flask静态文件获取404

来自分类Dev

基本路由上的NodeJS + Express 404

来自分类Dev

节点/ Express,如何修改静态文件但仍然可以访问req.params?

来自分类Dev

代理nginx Express-静态文件上的404

来自分类Dev

Express的静态文件

来自分类Dev

烧瓶静态文件给404

来自分类Dev

如果路由在单独的文件中提到,express.router 会抛出 404

来自分类Dev

express 静态文件的放置

来自分类Dev

express.js 路由返回 404

Related 相关文章

  1. 1

    Express.js(Node.js):静态文件服务如何真正起作用?

  2. 2

    在Express中使用*路由时,从不存在的静态内容中发送404标头

  3. 3

    Flask静态文件获取404

  4. 4

    NginX代理Nodejs / Express-静态文件上的404

  5. 5

    Express找不到静态文件

  6. 6

    节点/ Express-静态服务不起作用/如何使用带有静态服务文件的路由

  7. 7

    节点/ Express,如何修改静态文件但仍然可以访问req.params?

  8. 8

    Express JS获取目录中所有静态文件的404

  9. 9

    使用NGINX提供静态文件时,如何使用Node.js的404响应?

  10. 10

    Express-无法投放静态文件(404错误)

  11. 11

    Express的静态文件

  12. 12

    捕获所有路由而不捕获静态文件

  13. 13

    烧瓶静态文件给404

  14. 14

    如何使用Django和Nginx解决404静态文件的问题?

  15. 15

    通过Nginx提供静态文件时如何修复404错误

  16. 16

    如何设置nginx来解决在静态文件vue上找不到的404?

  17. 17

    Express如何/在何处确定静态文件的内容类型

  18. 18

    IIS / Server 2019上的Blazor静态文件404错误,但IIS Express / Win10没有

  19. 19

    如何使用Django和Nginx解决404静态文件的问题?

  20. 20

    静态路由返回404?

  21. 21

    Flask静态文件获取404

  22. 22

    基本路由上的NodeJS + Express 404

  23. 23

    节点/ Express,如何修改静态文件但仍然可以访问req.params?

  24. 24

    代理nginx Express-静态文件上的404

  25. 25

    Express的静态文件

  26. 26

    烧瓶静态文件给404

  27. 27

    如果路由在单独的文件中提到,express.router 会抛出 404

  28. 28

    express 静态文件的放置

  29. 29

    express.js 路由返回 404

热门标签

归档