微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何创建一个中间件来响应 express 上的所有静态文件请求?

如何解决如何创建一个中间件来响应 express 上的所有静态文件请求?

这是关于如何提供静态文件的明确建议:

https://expressjs.com/en/starter/static-files.html

app.use(express.static('public'))

实际上,这就是我实现它的方式,并且它有效:

app.use(express.static(path.resolve(__dirname,"../static")));

但问题是我的 URL 上的一些静态文件不是真正的静态文件,因为它们是动态构建的以响应请求。

例如:robots.txtsitemap.xml

所以现在,这就是我处理这个问题的方式:

app.get("/robots.txt",robottxt_handler);
app.use(express.static(path.resolve(__dirname,"../static")));

那些特定的文件路由出现在 app.use(express.static()) 之前,因此它们会被这些特定的处理程序响应。

但我想将该逻辑分成不同文件中的 express.router()

类似于:

staticRouter.ts

export const staticRouter = express.router();

// HANDLE STATIC ROUTES THE SAME WAY I DESCRIbed ABOVE

所以在我的主文件中,我会这样做:

index.ts

app.use("/xxx.xxx",staticRouter);

因此,对我的应用程序上的静态文件路由发出的所有请求都应由我的 staticRouter 中间件处理。

但我的问题是,如何将所有可能的静态路由表示到我的 app.use("/xxx.xxx",...) 中?

这可能吗?

解决方法

刚刚发现您可以将 path 属性作为 RegExp 传递。

所以下面的代码应该可以工作,但你需要特别注意静态文件中允许使用的字符。

Link to Regex101

app.use(/^(\/[\w-]+)+(\.[\w-]+)+$/i,(req,res,next) => {
  return res.send("THIS IS A STATIC FILE ROUTE");
});

此正则表达式允许 a-z0-9-_ 作为文件夹和文件名中的容器。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。