如何在 ExpressJS + NodeJS 中禁用网页缓存? [英] How to disable webpage caching in ExpressJS + NodeJS?

查看:56
本文介绍了如何在 ExpressJS + NodeJS 中禁用网页缓存?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

默认情况下,我的浏览器会缓存 ExpressJS 应用程序的网页.

By default, my browser caches webpages of my ExpressJS app.

这导致我的登录系统出现问题(未登录的用户可以打开已登录用户的旧缓存页面).

This is causing a problem to my login system (users not logged in can open old cached pages of logged in users).

如何禁用此缓存?

我的app.js(主文件):

var express = require('express');
var http = require('http');
var path = require('path');

var store = require('./routes/store');
var app = express();

app.configure(function(){
  app.set('port', process.env.PORT || 3012);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(express.cookieParser('your secret here'));
  app.use(express.session());
  app.use(app.router);
  app.use(require('stylus').middleware(__dirname + '/public'));
  app.use(express.static(path.join(__dirname, 'public')));
});

app.configure('development', function(){
  app.use(express.errorHandler());
});

app.get('/', store.home);
app.post('/', store.home);



app.get('/addProblem', store.addProblem);
app.post('/addProblem', store.addProblem);

app.get('/problem', store.problem);
app.post('/problem', store.problem);

app.get('/problemList', store.problemList);
app.post('/problemList', store.problemList);

app.get('/main', store.main);
app.post('/main', store.main);

app.post('/login', store.login);
app.get('/login', store.login);

app.get('/createProblem', store.createProblem);
app.post('/createProblem', store.createProblem);

app.post('/register', store.register);
app.get('/register', store.register);

app.post('/evaluate', store.evaluate);
app.get('/evaluate', store.evaluate);

app.get('/logout', store.logout);
app.post('/logout', store.logout);

http.createServer(app).listen(app.get('port'), function(){
  console.log("Express server listening on port " + app.get('port'));
});

推荐答案

在 Express.js 中处理缓存时需要考虑两件事 - ETagCache-Control 标题.

There are two things to consider when dealing with cache in Express.js - ETag and Cache-Control headers.

ETag(MDN 参考)
如果您的动态内容无法从 ETag 中受益,最好禁用它,因为它会为每个请求带来很小的开销.

ETag (MDN reference)
If you have dynamic content which does not benefit from ETags, it's best to disable it because it incurs small overhead with each request.

app.set('etag', false)

缓存控制(MDN 参考)
要完全禁用缓存,请使用以下标头:

Cache-Control (MDN reference)
To completely disable cache, use the following header:

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

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

This header does not affect express.static() middleware. It handles cache in its own way.

这篇关于如何在 ExpressJS + NodeJS 中禁用网页缓存?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆