node.js – 如何在express中的子目录上设置缓存头

使用带有node.js的express时,您可以控制公共资源的缓存头,如下所示:

app.use(express.static(path.join(__dirname,'public'),{ maxAge: 31557600000 }));

这将公共文件夹下的所有内容设置为静态可用,缓存超时为1年.但是,如果我想为公共下的其他文件设置不同的超时值呢?假设我在公共/图像/图标下有一些图像,我希望它具有1年的较小值?我尝试添加第二次静态调用,如下所示:

app.use(express.static(path.join(__dirname,{ maxAge: 31557600000 }));
app.use(express.static(path.join(__dirname,'public/images/icons'),{ maxAge: 12345 }));

但它不起作用.它似乎只是忽略了第二个陈述.思考?

解决方法

Express按顺序测试中间件,如果你先把最具体的express.static调用,那么它应该工作,即

app.use(express.static(path.join(__dirname,{ maxAge: 12345 }));
app.use(express.static(path.join(__dirname,'public/images'),{ maxAge: 1234567 }));
app.use(express.static(path.join(__dirname,'public/else'),{ maxAge: 9874567 }));
app.use(express.static(path.join(__dirname,{ maxAge: 31557600000 }));

等等

编辑:

这不会维持路径,所以我会这样做

function static(dirname,age) {
    return express.static(path.join(__dirname,dirname),{ maxAge: age });
}

然后打电话

app.use('/public/images/icons',static('public/images/icons',12345));
app.use('/public/images/',static('public/images',1234567);

等等

这背后的原因是我之前的解决方案在根位置安装了所有静态文件,而此解决方案使用正确的maxAge在该文件路径上安装每个目录

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...