我希望做这样的事情:
app.get('*.gz',function(req,res,next){
res.set('Content-Encoding','gzip');
next();
});
但我不认为我使用的正则表达式是正确的。如示例所示,我正在寻找能够捕获对扩展名为.gz的静态资产的所有请求的中间件。 (.gz是由gzip压缩的文件)。我的例子是正确的吗?
如果有人能提到Expess使用的正则表达式,那么这将有助于我查找参考资料。到目前为止,我从来没有读过它们是标准的JS正则表达式还是Perl样式还是什么?
答案 0 :(得分:1)
我认为您可以尝试app.use而不是app.get并检查您正在寻找的静态文件是否正确,类似这样
app.use("*.gz" , function(req,res,next){
console.log(req.originalUrl);
next();
}
您必须在提供静态文件之前放置此代码(app.use(express.static(...))
答案 1 :(得分:1)
(.*)\.gz$
这将捕获没有扩展名的文件名。如果您需要扩展名,请将右括号移至gz
右侧。这可能会给你一些误报,这取决于你的数据结构 - 你在问题中没有提到,顺便说一句。这样可以避免任何看起来像这样的文件名:filename.gz.tar
。
以下是regex101.com的代码细分:
1st Capturing group (.*)
.* matches any character (except newline)
Quantifier: * Between zero and unlimited times,
as many times as possible, giving back as needed [greedy]
\. matches the character . literally
gz matches the characters gz literally (case sensitive)
$ assert position at end of the string
g modifier: global. All matches (don't return on first match)
答案 2 :(得分:0)
正则表达式为'.*\.gz'
,以获取扩展名为.gz
的所有文件名
我已经使用前端js了一点,正则表达式用反斜杠而不是单引号关闭。请检查这是否是输入正则表达式的正确方法。
您目前正在使用通配符“*”技术。各种语言都支持这种功能,例如VB(Visual Basic)我会选择具有相同扩展名的文件。