Express – 为某些文件设置不同的maxAge

我正在构build一个单一的页面应用程序使用Express后端和AngularJS的前端,我有一些caching问题。

我没有使用明确的意见,只有express.static中间件提供文件。

我的静态文件是public/apppublic/dist取决于环境(dist已缩小的文件)。

 app.use app.router app.use express.static(cwd + '/public/' + publicFolder, maxAge: MAX_AGE) 

当请求“/”,app.routervalidation用户是否login,如果一切正常,然后index.html通过express.static (我只是在控制器中调用next() )。 如果用户没有login,它会被redirect到login.html

我的问题是,如果我设置maxAge,我的index.html文件得到caching和第一个请求'/'不通过router 。 即使我没有login,我也可以进入该应用程序。

如果我将maxAge设置为0,则问题消失,但是我想caching所有的* .js和* .css文件。

这种问题的正确方法是什么? 开始使用视图? 不同的express.static挂载点?

您可以随时定义个别路线,而不必使用视图(尽pipe视图模板并不是一个坏主意)。 这样你可以定义index.html来应用特殊情况maxAge

只要确保在静态中间件之前放置路由。

如果你想要的话,甚至可以使用发送 , static中间件在后台使用的静态服务器。 就像是:

 // install send from npm var send = require("send"); app.get("/index.html", function (req, res) { send(req, "/index.html") .maxage(0) .root(__dirname + "/public") .pipe(res); }); 

或者更低层次的stream方式,如:

 app.get("/index.html", function (req, res) { res.setHeader('Content-Type', 'text/html'); res.setHeader('Cache-Control', 'public, max-age=0'); // Note that you'd probably want to stat the file for `content-length` // as well. This is just an example. var stream = fs.createReadStream(__dirname + '/public/index.html'); stream.pipe(res); });