gpt4 book ai didi

node.js - Express - 为某些文件设置不同的 maxAge

转载 作者:搜寻专家 更新时间:2023-10-31 22:46:11 27 4
gpt4 key购买 nike

我正在构建一个单页应用程序,后端使用 Express,前端使用 AngularJS,但我遇到了一些缓存问题。

我没有使用 express View ,仅使用 express.static 中间件提供文件。

我的静态文件位于 public/apppublic/dist 中,具体取决于环境(dist 具有缩小文件)。

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

当请求 '/' 时,app.router 验证用户是否登录,如果一切正常,则通过 express.static 提供 index.html(我只需在 Controller 中调用 next() 即可)。如果用户未登录,它将被重定向到 login.html

我的问题是,如果我设置了 maxAge,我的 index.html 文件会被缓存,并且对“/”的第一个请求不会通过 router。即使我没有登录,我也可以进入该应用程序。

如果我将 maxAge 设置为 0,问题就会消失,但我想缓存我所有的 *.js 和 *.css 文件。

解决此类问题的正确方法是什么?开始使用 View ?不同的 express.static 挂载点?

最佳答案

您始终可以定义单独的路由,而不必使用 View (尽管 View 模板不是一个坏主意)。通过这种方式,您可以定义 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);
});

或者更底层的流方式,比如:

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);
});

关于node.js - Express - 为某些文件设置不同的 maxAge,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17407770/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com