如何在express.js中对JSON响应设置cache-control策略?我的JSON响应根本没有改变,所以我想积极地缓存它。我发现了如何在静态文件上进行缓存,但无法找到如何在动态数据上进行缓存。
lawou6xi1#
我最近也有同样的问题,对我有效的方法是:
const express = require('express'); const app = express(); const port = 3000; let options = { maxAge: '2y', etag: false } app.use(express.static('public', options));
基本上使用maxAge可以设置缓存时间。文档:https://expressjs.com/en/starter/static-files.html
maxAge
smtd7mpg2#
不太好的方法是在任何JSON输出之前简单地添加对res.set()的调用。在那里,您可以指定设置该高速缓存控制头,它将相应地进行缓存。
res.set()
res.set('Cache-Control', 'public, max-age=31557600'); // one year
另一种方法是简单地在路由中为JSON响应设置res属性,然后使用回退中间件(在错误处理之前)来呈现和发送JSON。
res
app.get('/something.json', function (req, res, next) { res.JSONResponse = { 'hello': 'world' }; next(); // important! }); // ... // Before your error handling middleware: app.use(function (req, res, next) { if (! ('JSONResponse' in res) ) { return next(); } res.set('Cache-Control', 'public, max-age=31557600'); res.json(res.JSONResponse); })
编辑:Express v4从res.setHeader更改为res.set
res.setHeader
res.set
mklgxw1f3#
你可以这样做,例如:
res.set('Cache-Control', 'public, max-age=31557600, s-maxage=31557600'); // 1 year
3条答案
按热度按时间lawou6xi1#
我最近也有同样的问题,对我有效的方法是:
基本上使用
maxAge
可以设置缓存时间。文档:https://expressjs.com/en/starter/static-files.htmlsmtd7mpg2#
不太好的方法是在任何JSON输出之前简单地添加对
res.set()
的调用。在那里,您可以指定设置该高速缓存控制头,它将相应地进行缓存。另一种方法是简单地在路由中为JSON响应设置
res
属性,然后使用回退中间件(在错误处理之前)来呈现和发送JSON。编辑:Express v4从
res.setHeader
更改为res.set
mklgxw1f3#
你可以这样做,例如: