Нет кеша на сервере nodejs
Я прочитал, что, чтобы избежать кэша в nodejs, необходимо использовать:
"res.header('Cache-Control', 'no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0');"
Но я не знаю, как его использовать, потому что я получаю ошибки, когда я помещаю эту строку в свой код.
Моя функция (где я думаю, что мне не нужно кэшировать):
function getFile(localPath, mimeType, res) {
fs.readFile(localPath, function(err, contents) {
if (!err) {
res.writeHead(200, {
"Content-Type": mimeType,
"Content-Length": contents.length,
'Accept-Ranges': 'bytes',
});
//res.header('Cache-Control', 'no-cache');
res.end(contents);
} else {
res.writeHead(500);
res.end();
}
});
}
Кто-нибудь знает, как не класть кеш в мой код? спасибо
Ответы
Ответ 1
Вы уже писали свои заголовки. Я не думаю, что вы можете добавить больше после того, как вы это сделали, поэтому просто поместите свои заголовки в свой первый объект.
res.writeHead(200, {
'Content-Type': mimeType,
'Content-Length': contents.length,
'Accept-Ranges': 'bytes',
'Cache-Control': 'no-cache'
});
Ответ 2
Используйте промежуточное программное обеспечение для добавления заголовков no-cache
. Используйте это промежуточное программное обеспечение, где вы собираетесь отключить кеширование.
function nocache(req, res, next) {
res.header('Cache-Control', 'private, no-cache, no-store, must-revalidate');
res.header('Expires', '-1');
res.header('Pragma', 'no-cache');
next();
}
Используйте промежуточное ПО в определении маршрутов:
app.get('/getfile', nocache, sendContent);
function sendContent(req, res) {
var localPath = 'some-file';
var mimeType = '';
fs.readFile(localPath, 'utf8', function (err, contents) {
if (!err && contents) {
res.header('Content-Type', mimeType);
res.header('Content-Length', contents.length);
res.end(contents);
} else {
res.writeHead(500);
res.end();
}
});
}
Сообщите мне, если это сработает для вас.
Ответ 3
Установите эти заголовки в ответ:
'Cache-Control': 'private, no-cache, no-store, must-revalidate'
'Expires': '-1'
'Pragma': 'no-cache'
Если вы используете express, вы можете добавить это промежуточное программное обеспечение, чтобы не иметь кеша для всех запросов:
// var app = express()
app.use(function (req, res, next) {
res.header('Cache-Control', 'private, no-cache, no-store, must-revalidate');
res.header('Expires', '-1');
res.header('Pragma', 'no-cache');
next()
});
Ответ 4
Ответ Pylinux работал у меня, но после дальнейшей проверки я нашел модуль шлема для выражения, который обрабатывает некоторые другие функции безопасности для вас.
http://webapplog.com/express-js-security-tips/
Чтобы использовать, установить и потребовать шлем в express.js, вызовите app.use(helmet.noCache());
Ответ 5
После обработки исходного кода для экспресс-и свежих модулей это работает со стороны сервера (до вызова Res.end):
req.headers['if-modified-since'] = undefined;
req.headers['if-none-match'] = undefined;
Отвратительно, но он работает.