我正在构建一个单页应用程序,使用Express作为后端,AngularJS作为前端,我遇到了一些缓存问题.
我没有使用快速视图,只使用express.static中间件提供文件.
我的静态文件在环境中public/app或public/dist取决于环境(dist具有缩小的文件).
app.use app.router
app.use express.static(cwd + '/public/' + publicFolder, maxAge: MAX_AGE)
Run Code Online (Sandbox Code Playgroud)
当请求'/'时,app.router验证用户是否已登录,如果一切正常,则index.html通过express.static(我只是next()在控制器中调用)提供服务.如果用户未登录,则会将其重定向到login.html
我的问题是,如果我设置maxAge,我的index.html文件会被缓存,第一个'/'请求不会通过router.即使我没有登录,我也可以进入该应用程序.
如果我将maxAge设置为0,问题就会消失,但我想缓存所有*.js和*.css文件.
解决这类问题的正确方法是什么?开始使用视图?不同的express.static挂载点?
您始终可以定义单独的路线,而不必使用视图(尽管视图模板不是一个坏主意)。通过这种方式,您可以定义index.html仅应用特殊情况maxAge。
只要确保将路由放在静态中间件之前即可。
如果您愿意,您甚至可以使用sendstatic ,它是中间件在幕后使用的同一静态服务器。就像是:
// 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);
});
Run Code Online (Sandbox Code Playgroud)
或者更底层的流方式,例如:
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);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2356 次 |
| 最近记录: |