在Node Express中强制刷新缓存的index.html文件

时间:2019-08-29 11:53:02

标签: node.js express caching

确保所有用户获得新鲜的index.html而不是缓存的index.html的最佳方法是什么?

因此,上周我试图使用户缓存单页应用程序的js和css捆绑包。我在server.js文件中添加了最长期限:

app.use(express.static('build', { maxAge: '365d' }));

问题在于index.html文件也位于build文件夹中。这意味着它已经被客户端缓存了365天...

因此,即使我在js和css捆绑软件上都有缓存破坏功能,但index.html文件始终是相同的,因此由于旧哈希,捆绑软件仍保持不变。

我现在将服务器改为使用Etag:

app.use(express.static('build', { etag: true }));

这很好用。

问题是我将其推送到了生产环境,现在所有用户都拥有一个过时的index.html。

我使用Node Express和AWS Application Load Balancer。

发送index.html的端点如下:

app.get('*', (request, response) => {
  response.sendFile(path.join(__dirname, 'build/index.html'));
});

有人有聪明的解决方案吗?

我已经研究过使用这样的php文件:https://github.com/facebook/create-react-app/issues/1910。那是最好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

使用index.html路由时可以发送标头不缓存

例如:

app.get('/', (request, response) => {
  response.header('Cache-Control', 'private, no-cache, no-store, must-revalidate');
  response.header('Expires', '-1');
  response.header('Pragma', 'no-cache');
  response.sendFile(path.join(__dirname, 'build/index.html'));
});