2013-03-15 92 views
4

当使用快递与Node.js的,你可以控制公共资源的缓存头是这样的:如何设置子目录缓存头快递

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

,公共文件夹下建立的一切是静态可用,缓存超时时间为1年。但是如果我想为公共下的其他文件设置不同的超时值呢?假设我在公共/图像/图标下有一些图像,我想要一年的较小值?我试图增加第二个电话来静态像这样:

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

但它没有工作。这似乎忽略了第二个陈述。思考?

回答

1

source code显示静态中间件拦截了来自url路径部分的任何类似于文件路径的内容,从配置的根目录统计文件并在其存在时对其进行提供。

使用香草中间件不可能改变maxAge选项。

我的建议是你让你自己的中间件(只是一个函数),并创建静态中间件(每目录)中相应的号码和你的req, res, next参数转发到正确的一个

+2

感谢您的帮助。不完全遵循您的推荐解决方案。一种表达noob。我可以快速获得样品吗? – d512 2013-03-15 16:30:06

4

快速测试中间件,以便为所以,如果你把最具体的express.static调用第一,那么它应该工作,即

app.use(express.static(path.join(__dirname, 'public/images/icons'), { 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, 'public'), { 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的文件路径中

+0

你确定吗?它似乎没有工作。 – d512 2013-03-15 20:11:41

+1

请参阅我的编辑 - 添加静态目录时,我以前的解决方案搞乱了文件路径 – Benoir 2013-03-15 22:20:19

+0

您有static()方法带三个参数。是对的吗?表达式的版本有一个静态,只有两个参数。 – d512 2013-03-18 16:13:00

0

您需要安装每个文件夹在public之内,因为它将成为服务器。也就是说,没有public

app.use('/css', express.static(__dirname + '/public/css', { maxAge: '1h'})); 
app.use('/img', express.static(__dirname + '/public/img', { maxAge: '1h'})); 
app.use('/fonts', express.static(__dirname + '/public/fonts', { maxAge: '1h'})); 
app.use(express.static(path.join(__dirname, 'public')));