Http 如何让connect/express在特定目录上使用非过期缓存
我正在开发一个使用connect/express和node.js的应用程序。它使用如下“静态”中间件:Http 如何让connect/express在特定目录上使用非过期缓存,http,caching,node.js,express,connect,Http,Caching,Node.js,Express,Connect,我正在开发一个使用connect/express和node.js的应用程序。它使用如下“静态”中间件: var express = require("express"); var io = require("socket.io"); var app = express.createServer( express.static(__dirname + '/static') ); app.listen(process.env.PORT || 8080); var listener = i
var express = require("express");
var io = require("socket.io");
var app = express.createServer(
express.static(__dirname + '/static')
);
app.listen(process.env.PORT || 8080);
var listener = io.listen(app);
var lobby = listener.of("/lobby");
lobby.on("connection", function (socket) {
// etc etc etc
});
var app = express.createServer(
(function(req, res, next) {
if(req.url.indexOf("/mp3/") === 0) {
res.setHeader("Cache-Control", "public, max-age=345600"); // 4 days
res.setHeader("Expires", new Date(Date.now() + 345600000).toUTCString());
}
return next();
}),
express.static(__dirname + '/static')
);
app.listen(process.env.PORT || 8080);
在/static
中,有一个文件夹/static/mp3
,其中包含应用程序使用的88个音频文件
尽管归来的访问者缓存了文件,但他们仍然发送88个http请求询问缓存的副本是否过期,这让我抓狂我如何仅为该文件夹强制执行
Expires
或max age
缓存?好的,一旦我意识到连接“中间件”方案是如何工作的,答案就很简单了。到目前为止,我的解决方案似乎工作得很好,就是在调用express\createServer
时,在static
之前插入我自己的中间件,如下所示:
var express = require("express");
var io = require("socket.io");
var app = express.createServer(
express.static(__dirname + '/static')
);
app.listen(process.env.PORT || 8080);
var listener = io.listen(app);
var lobby = listener.of("/lobby");
lobby.on("connection", function (socket) {
// etc etc etc
});
var app = express.createServer(
(function(req, res, next) {
if(req.url.indexOf("/mp3/") === 0) {
res.setHeader("Cache-Control", "public, max-age=345600"); // 4 days
res.setHeader("Expires", new Date(Date.now() + 345600000).toUTCString());
}
return next();
}),
express.static(__dirname + '/static')
);
app.listen(process.env.PORT || 8080);
@布兰登的回答很完美,因为我玩的是咖啡脚本,这就是我使用的:
app.use (req, res, next) ->
if req.url.indexOf "/js/" == 0 || req.url.indexOf "/img/" == 0
res.setHeader "Cache-Control", "public, max-age=345600"
res.setHeader "Expires", new Date(Date.now() + 345600000).toUTCString()
next()
干杯