NodeJS Dynamic Data Express.JS的缓存控制

gg0vcinb  于 2023-04-05  发布在  Node.js
关注(0)|答案(3)|浏览(109)

如何在express.js中对JSON响应设置cache-control策略?
我的JSON响应根本没有改变,所以我想积极地缓存它。
我发现了如何在静态文件上进行缓存,但无法找到如何在动态数据上进行缓存。

lawou6xi

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

smtd7mpg

smtd7mpg2#

不太好的方法是在任何JSON输出之前简单地添加对res.set()的调用。在那里,您可以指定设置该高速缓存控制头,它将相应地进行缓存。

res.set('Cache-Control', 'public, max-age=31557600'); // one year

另一种方法是简单地在路由中为JSON响应设置res属性,然后使用回退中间件(在错误处理之前)来呈现和发送JSON。

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

mklgxw1f

mklgxw1f3#

你可以这样做,例如:

res.set('Cache-Control', 'public, max-age=31557600, s-maxage=31557600'); // 1 year

相关问题