我正在尝试在我的nodeJS Express应用程序中设置Cloudfront(使用Jade作为渲染引擎),并满足以下要求:
- 仅在生产服务器上使用 Cloudfront(不在本地主机或登台服务器上)
- 不在jade模板中的所有脚本和CSS上使用条件语句
- 尝试寻找一两个类轮,以防我需要切换到不同的提供商
我想出了一种可能的解决方案:覆盖 Jade 呈现链接和脚本的方式并仅在生产中添加 Cloudfront url:
Jade.override(“link”,function(){
if(prod) link.src = cloudfront_url + link.src
})
但是,Jade 不允许覆盖其任何功能。有人知道在 Node 应用程序上使用 Cloudfront 的简单方法吗?
最佳答案
不幸的是,我没有适合您的 2 衬垫,但我认为这会给您很大的灵 active 。第一步是将基本 url 分配给与 res.locals
属性上的所有模板共享的本地变量,如下所示:
// add this to app.js
// its VERY important that this app.use comes BEFORE app.set('view engine'....
var isProd = true;
app.use(function(req, res, next) {
res.locals.CDN_URI = isProd ? 'http://zzzz.cloudfront' : '';
next();
});
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
.....
然后,第二步是稍微痛苦的部分 - 您需要更新所有模板以在您想要从 Cloudfront 提供服务的所有 Assets 之前调用 CDN_URI:
img(src="#{CDN_URI}/img/logo.jpg")
脚本(src="#{CDN_URI}/js/main.min.js")
link(rel="stylesheet", href="#{CDN_URI}/stylesheets/style.css")
因此,这将是一些前期工作,但我相信,如果您将来需要更改 CDN_URI,或者设置多个环境(开发、测试、阶段等),这将为您提供最大的灵 active
此外,我认为您不希望盲目地将 cdn url 添加到所有 src 属性中,因为您可能最终(如果还没有)从第三方网站提取图像/脚本 - 使用此“CDN_URI”标记方法将允许您选择从云端加载哪些 Assets 。
关于node.js - 寻找一个简单的设置来将 Cloudfront 与 Node.js Express 应用程序一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33136622/