查找将 Cloudfront 与 node.js Express 应用程序一起使用的简单设置

Finding a simple set up to use Cloudfront with a node.js express app

我正在尝试在我的 nodeJS Express 应用程序(使用 Jade 作为渲染引擎)中设置 Cloudfront,满足以下要求:

我想出了一个可能的解决方案:覆盖 Jade 呈现链接和脚本的方式并仅在生产环境中添加 Cloudfront url:

Jade.override(“link”,function(){
if(prod) link.src = cloudfront_url + link.src
})

但是,Jade 不允许覆盖它的任何函数。有人知道在节点应用程序上使用 Cloudfront 的简单方法吗?

很遗憾,我没有适合您的 2 衬垫,但我认为这会给您带来很大的灵活性。第一步是将基础 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');
.....

然后,第二步是稍微痛苦的部分 - 您需要更新所有模板以在您希望从云端服务的所有资产之前调用 CDN_URI:

img(src="#{CDN_URI}/img/logo.jpg")

script(src="#{CDN_URI}/js/main.min.js")

link(rel="stylesheet", href="#{CDN_URI}/stylesheets/style.css")

所以前期需要做一些工作,但我相信如果您将来需要更改 CDN_URI,或者如果您设置多个环境(开发、测试、舞台等)

另外,我不认为你会想盲目地将 cdn url 添加到你所有的 src 属性,因为你可能最终(如果你还没有)拉入 images/scripts 来自第三方网站 - 使用这种 "CDN_URI" 标记方法将允许您挑选和选择从云端加载的资产。