4

将 express 与 node.js 一起使用时,您可以控制公共资源的缓存标头,如下所示:

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

这会将公用文件夹下的所有内容设置为静态可用,缓存超时为 1 年。但是,如果我想为公共下的其他文件设置不同的超时值怎么办?假设我在 public/images/icons 下有一些图像,我希望其值小于 1 年?我尝试像这样添加第二个静态调用:

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

但它没有用。它似乎只是忽略了第二个陈述。想法?

4

3 回答 3

5

Express 按顺序测试中间件,因此如果您首先放置最具体的 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 的文件路径

于 2013-03-15T18:02:06.807 回答
1

静态中间件的源代码显示,它从 url 的路径部分截取任何看起来像文件路径的东西,从配置的根目录中统计文件,并在它存在时提供它。

无法使用 vanilla 中间件更改 maxAge 选项。

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

于 2013-03-15T16:19:18.323 回答
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')));
于 2017-02-03T23:21:42.683 回答