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

查看:605
本文介绍了如何禁用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- ETag Cache-Control 标头。

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

ETag MDN参考

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

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天全站免登陆