【问题标题】:Finding a simple set up to use Cloudfront with a node.js express app找到一个简单的设置以将 Cloudfront 与 node.js express 应用程序一起使用
【发布时间】:2016-01-13 04:59:40
【问题描述】:

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

  • 仅在生产服务器上使用 Cloudfront(不在 localhost 或临时服务器上)
  • 没有对jade模板中的所有脚本和css使用条件语句
  • 尝试寻找一两个班轮,以防我需要切换到其他供应商

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

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

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

【问题讨论】:

    标签: node.js amazon-web-services express pug amazon-cloudfront


    【解决方案1】:

    很遗憾,我没有适合您的 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 属性中,因为您可能最终(如果您还没有)从第三方网站中提取图像/脚本 - 使用这个“CDN_URI”标签方法将允许您选择从云端加载哪些资产。

    【讨论】:

    • 谢谢!我最终在我的玉模板中使用了一个 mixin,但我必须更新所有使用 Cloudfront 的链接。你的解决方案实际上更好。
    猜你喜欢
    • 2017-09-22
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    相关资源
    最近更新 更多