Angular向我不想要的.js文件请求添加一个随机数
Posted
技术标签:
【中文标题】Angular向我不想要的.js文件请求添加一个随机数【英文标题】:Angular adding a random number to requests for .js files which I do not want 【发布时间】:2014-01-18 05:13:26 【问题描述】:如果这是一件小事,请原谅...我无法解决这个问题。
我希望缓存我的所有 Js 文件(我已将 maxAge 设置为一天,您可以在下面的代码 sn-p 中看到)。 css 和图像被缓存在浏览器中,而不是 .js 文件中。
某处的某处正在向每个 js 文件添加一个随机数作为查询字符串参数,这会强制浏览器不缓存,我猜它可能是这样做的。
有没有办法正确配置 express 以便不添加随机数查询字符串。
var oneDay = 86400000;
app.use(express.compress());
app.use('/assets', express.static(path.join(__dirname, 'public/app/assets/'), maxAge: oneDay ));
app.use('/app', express.static(path.join(__dirname, 'public/app/'), maxAge: oneDay ));
这是我的浏览器日志,显示了添加到 js 文件中的随机数
提前谢谢...
【问题讨论】:
实际上它看起来并不像一个随机数,而是一个时间戳。像这样的时间戳用于控制浏览器缓存。您确定每次刷新都有一个新数字,而不仅仅是在更新 js 文件时/一天过去了吗? Express 不会自动将时间戳添加到客户端代码。你是如何生成 html 的? @Hless 感谢您的回复。每次我导航到引用 js 文件的页面时,它都是一个新数字。这显示为 HTTP 200,我希望它是 304(或者因为我已经设置了确定的年龄,我认为浏览器应该在它过期之前没有请求)...... @Mouli 如果您在 HTML 中使用这些脚本标签,并且从服务器请求它们并添加了额外的时间戳,那么它应该是重写 URL 的客户端代码。 Angular 使用 jQuery(如果存在)。否则它使用 jQLite,一个 jQuery 的精简版本。在进行 AJAX 调用时,jQuery 会自动将时间戳添加到查询字符串中。解决此问题的一种黑客方式是致电jQuery.ajaxSetup(cache: false)
。 Angular 专家可能会告诉你一个更好的方法,所以我在这个问题中添加了 angularjs 标签。
【参考方案1】:
首先,您发布的代码似乎实际上是 node.js (ExpressJS),而不是 AngularJS。 maxAge 属性与缓存有关,尽管正如@robertklep 指出的那样,这不会导致添加时间戳。 (见http://expressjs.com/api.html#res.sendfile)?
其次,Angular 通过 $resource 对象本身支持资源缓存 - 请参阅: http://docs.angularjs.org/api/ngResource.$resource
第三个也是更有可能 - 显示的时间戳与 jQuery 与 AJAX 一起使用的方式相同,正如 @Nate 在 cmets 中所建议的那样。修改 $resource 配置/调用很可能会解决这个问题。
最后,发布更多代码将有助于确定问题所在。
【讨论】:
Express 如何为静态 HTML 文件中的 URL 添加时间戳? 没有测试过。只是一个建议。我说“可能”。很难看出,问题是没有足够的代码来查看(解释尤达)。但经过考虑,我认为@Nate 的评论更有可能——很可能是 jQuery 或 jQlite。 好吧,我不确定是什么促使您认为代码是 Angular。它是 NodeJs,直到 @robertkelp 指出它可能是 Angular——我从来没有怀疑过。很高兴粘贴更多代码,但它是一个非常简单的应用程序,其中 nodejs 代码看起来像上面的那样,并且 html 有 我很抱歉标题。原文是“NodeJs(Express) 添加时间戳”,显然 Nate 将其修改为“Angular ...”以引起一些 Angular 专家的注意。感谢您的帮助。以上是关于Angular向我不想要的.js文件请求添加一个随机数的主要内容,如果未能解决你的问题,请参考以下文章
ANGULAR 没有向我的特定 Http Post 请求发送标头
Angular Cli Webpack,如何添加或捆绑外部 js 文件?
Ionic 2 / Angular 2 / CORS:HTTP 标头未随请求一起发送