【发布时间】:2013-12-06 15:53:44
【问题描述】:
其实我有:
- Nginx 运行以提供静态文件(css、js 等)
- 带有 express.js 的节点,模板引擎:ECT(我可能会更改为 Swig)
我目前正在尝试找到使用带有版本控制的自定义前缀分发静态文件的最佳方法:
- 'http://static.mydomain.com/' 在生产中
- '/path/to/static' 在开发中
为此,我只设置了一个包含前缀的变量(取决于环境)。 然后对于每个请求,我设置在快速中间件中为 locals 添加前缀,以便在任何 html 模板中访问此变量:
this.use(function(req, res, next) {
res.locals.staticPrefix = staticPrefix;
next();
});
但由于我还希望这些静态文件也被客户端的浏览器缓存,因此 Nginx 为这些文件提供 expire = 30d。
现在要强制客户端检索静态文件(例如,如果它已更改),我需要提供带有动态 url 参数的静态 url。
我的第一个想法是在启动 nodejs 应用程序时设置一个版本变量以将其附加到最终 url:
var staticVersion = new Date().getTime();
所以在 html 模板中,“myFile.css”的最终 url 应该是这样的:staticPrefix + 'myFile.css?' + staticVersion
在这种情况下,我只需要在其中一个静态文件更新后重新启动 nodejs 应用程序。它会使 url 改变(根据新的日期)和客户端做一个新的文件请求。
有没有更好的方法来用 node 处理这种情况?
【问题讨论】:
标签: javascript css node.js nginx static