如何设置快速子目录上的caching标题

当在node.js中使用express时,您可以像这样控制公共资源的caching头文件:

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

这将公共文件夹下的所有内容设置为静态可用,caching超时时间为1年。 但是,如果我想为公共下的其他文件设置不同的超时值呢? 假设我在公共/图像/图标下面有一些图像,我想要一个较小值的图像, 我尝试添加第二个电话静态像这样:

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

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

快速testing中间件的顺序,所以如果你先把最具体的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 })); 

等等

编辑:

这不会保持path,所以我会这样做

 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); 

等等

其原因是我以前的解决scheme将所有的静态文件安装在根,而这个解决scheme安装每个目录在该文件path与正确的maxAge

静态中间件的源代码显示它拦截了url的path部分中看起来像文件path的任何东西,从configuration的根目录统计文件并在存在的情况下提供它。

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

我build议你制作自己的中间件(只是一个函数),并创build适当数量的静态中间件(在每个目录上),并将你的req, res, next参数转发到正确的

您需要将每个文件夹放在publicpath上,因为它将是服务器。 也就是说,没有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')));