node.js - 寻找一个简单的设置来将 Cloudfront 与 Node.js Express 应用程序一起使用

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

我正在尝试在我的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/

相关文章:

node.js - 为什么有些 Gulp 默认流 "flow",而有些则没有?

express - 如何在 Express 中将所有请求作为过滤上下文处理?

express - 带有嵌套对象的 GraphQL 模式

node.js - node-sass 将 Node 升级到 4.0.0 时抛出错误

javascript - 在javascript中定义对象

node.js - 与 meteor 同步

python - AWS深度学习AMI虚拟环境激活

linux - 分区的文件系统丢失 EC2 重启

linux - 如何跟踪 EC2 实例或弹性 IP 上的公共(public)带宽使用情况?

mysql - 在 sequelize 中聚合来自嵌套模型的数据