如何禁用 Express 4 应用程序中某些路由的缓存?

Posted

技术标签:

【中文标题】如何禁用 Express 4 应用程序中某些路由的缓存?【英文标题】:How to disable caching for some routes in the Express 4 applications? 【发布时间】:2021-06-25 14:41:13 【问题描述】:

我试过这些例子:Removing all headers from express.js 这个Disable etag Header in Express Node.js 和这个https://github.com/expressjs/express/issues/2472 但不幸的是他们没有解决我的问题。在 Firefox、Opera 和 Chrome 中,当开发人员工具打开并禁用缓存时,或者当我在浏览器启动后第一次启动我的应用程序时,我的应用程序运行良好。我知道这与缓存有关。请告诉我,如何在 Express 应用程序中禁用某些路由的缓存。可能吗?有没有通用的方法来做到这一点?

附注我很惊讶,但我的 Express 应用在 Internet Explorer 11 中完美运行

【问题讨论】:

【参考方案1】:

在 Express.js 中处理缓存时需要考虑两件事

    ETag Cache-Control 标头。

ETag

如果您的动态内容不能从 ETags 中受益,最好禁用它,因为每次请求都会产生很小的开销。

app.set('etag', false)

缓存控制

要完全禁用缓存,请使用以下标头:

app.use((req, res, next) => 
  res.set('Cache-Control', 'no-store')
  next()
)

此标头不会影响express.static() 中间件。它以自己的方式处理缓存。

【讨论】:

不幸的是它没有效果:(

以上是关于如何禁用 Express 4 应用程序中某些路由的缓存?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 symfony2 中禁用某些路由的监听器?

什么是对 Express 4 路由器上的某些路由进行身份验证的更好方法?

如何使 Express 路由默认需要身份验证?

NodeJS + Express - 将会话中间件应用于某些路由

在 laravel 5.4 中为某些路由禁用 csrf 令牌?不工作[重复]

为某些路由禁用 vue-router?或者如何运行 SPA 后端和非 SPA 前端?