Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何集成AWS EC2上运行的NodeJ和AWS S3上的静态Angularjs内容?_Angularjs_Node.js_Amazon Web Services - Fatal编程技术网

如何集成AWS EC2上运行的NodeJ和AWS S3上的静态Angularjs内容?

如何集成AWS EC2上运行的NodeJ和AWS S3上的静态Angularjs内容?,angularjs,node.js,amazon-web-services,Angularjs,Node.js,Amazon Web Services,我有一个Nodejs和Angularjs应用程序运行在单个AWS EC2实例上。该应用程序的代码结构如下所示: 当前,当用户对应用程序进行第一次调用时,该调用由nodejs express framework处理,并使用server/server.js文件中的以下代码将调用定向到angular static目录中的index.html页面 res.sendFile(path.resolve(__dirname + '/../web/dist/index.html')); 从index.htm

我有一个Nodejs和Angularjs应用程序运行在单个AWS EC2实例上。该应用程序的代码结构如下所示:

当前,当用户对应用程序进行第一次调用时,该调用由nodejs express framework处理,并使用server/server.js文件中的以下代码将调用定向到angular static目录中的index.html页面

res.sendFile(path.resolve(__dirname + '/../web/dist/index.html'));
从index.html调用各种静态组件(JS、html、CSS等),所有angularjs控制器/服务都会回调nodejs API以满足用户请求

这种安排在单一情况下效果良好。现在我想移动角度静态内容(即web目录到AWS S3)。这样做时,我是否必须将server.js中的以下代码更改为:

res.sendFile(path.resolve('**AWS S3 URL** +/web/dist/index.html'));
因为我的静态文件现在已经移动到AWS S3。此外,在这样做的过程中,我必须修改所有角度控制器和服务,以使用nodejsapi调用的绝对路径。这意味着要进行大量的更改并引入部署配置(为了灵活性,我们必须在以后进行修改)

我们可以采取的另一种方法是通过在server/server.js中进行以下更改,将index.html从web移动到服务器文件夹:

res.sendFile(path.resolve(__dirname + '/../server/index.html'));
然后在server.js中添加以下代码,以处理从Nodejs到S3的静态内容重定向,如下所示:

app.get('/assets/*', function(req, res){
    var requestURL = req.url;
    var redirectedURL = <<**Remote S3 base URL**>> + requestURL;
    res.redirect(redirectedURL);
});
app.get('/assets/*',函数(req,res){
var requestURL=req.url;
var redirectedURL=+requestURL;
res.redirect(redirectedURL);
});

然而,问题是会有很多重定向,我想知道,如果这是一个好的设计?我曾读到,搜索引擎不喜欢有大量重定向(HTTP 301、304)的应用程序,而且这些页面的排名较低。因此,我试图找出在AWSEC2上部署NodeJ和在S3上部署静态angularjs内容的最佳实践。非常感谢您的建议。

您可以通过将文件的s3 URL添加到index.html中,直接从s3访问您的内容

如果您想从s3提供index.html,那么您必须将index.html一个重定向到s3,其他所有的都可以从s3直接加载到浏览器中


如果您真的想快速提供公共内容,我建议使用cloudfront是一个选项,您可以直接从cloudfront提供所有公共内容,而无需访问节点服务器,并且所有api调用都将访问节点服务器。但这取决于应用程序的体系结构

通过将文件的s3 URL添加到index.html中,可以直接从s3访问内容

如果您想从s3提供index.html,那么您必须将index.html一个重定向到s3,其他所有的都可以从s3直接加载到浏览器中


如果您真的想快速提供公共内容,我建议使用cloudfront是一个选项,您可以直接从cloudfront提供所有公共内容,而无需访问节点服务器,并且所有api调用都将访问节点服务器。但这取决于应用程序的体系结构

不需要重定向。您应该直接从S3提供静态web内容,这是通过为您的资源使用S3URL实现的。这也将减少服务器上的负载。您是否建议通过浏览器直接访问index.html(S3中),而不是通过NodeJ转发对index.html的调用,并使用绝对NodeJ API URL更新S3中的所有角度控制器。不需要重定向。您应该直接从S3提供静态web内容,这是通过为您的资源使用S3URL实现的。这也将减少服务器上的负载。您是否建议直接通过浏览器访问index.html(S3中),而不是通过nodejs将调用转发到index.html,并使用绝对nodejs API URL更新S3中的所有角度控制器。感谢您的回复。是的,最终目标是使用cloudfront作为CDN。非常感谢您的回复。是的,最终目标是将cloudfront用作CDN。