如何禁用ExpressJS + NodeJS中的网页缓存? [英] How to disable webpage caching in 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屋!