Express – 为某些文件设置不同的maxAge
我正在构build一个单一的页面应用程序使用Express后端和AngularJS的前端,我有一些caching问题。
我没有使用明确的意见,只有express.static
中间件提供文件。
我的静态文件是public/app
或public/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); });