提供我的angularJS网络应用程序静态内容,nodeJS或apache?

时间:2015-07-20 19:50:03

标签: angularjs node.js apache

我正在开发一个Web应用程序,客户端是一个angularJS应用程序,旨在使用My REST服务器端API,因此我公共目录中的所有文件都是静态的。

我想尝试使用NodeJS + express来制作我的服务器端API,因为我已经听过很多这样的内容,我接受了很多教程,现在我明白了如何制作API。

但我不明白为什么服务我的静态文件感觉如此复杂,我已经使用了很多LAMP堆栈并使用它来提供静态内容很容易,甚至不是一行代码。使用节点似乎我必须为每个文件写路由?

我已经读过有关使用apache来提供静态内容并拥有应用程序引用节点的人,如何做到这一点?我可以将客户端ajax请求指向另一个端口,并在服务器上的该端口上运行节点,还是需要另一个ip?

这是什么最好的做法?

3 个答案:

答案 0 :(得分:6)

在nodejs上提供静态文件非常简单,只需将所有这些文件添加到公共文件夹,并将以下中间件添加到您的快速应用程序中:

app.use(express.static(__dirname + '/public'));

其中__dirname + '/public'是公用文件夹的路径。就是这样,一行代码。

答案 1 :(得分:3)

Apache可能比node.js更高效。 Apache特别会有更多的开销。通常我会使用nginx来做这种事情。在您的情况下,您也可以将所有资产上传到CDN,因为您的资产是静态的。

来自nodejs的静态文件服务的一个问题是它不能处理诸如缓存,缓存控制,url_rewriting之类的事情,并提供DoS攻击的安全性。我真的建议在生产中使用nginx来提供静态资产,或CDN,可能是2的组合。你不想从你的API提供资产,有一个明确的分离线是好的所以你可以单独扩展每个,因为你的API可能需要更快地扩展。

像Nginx这样的东西肯定会在负载下表现更好。使用express的唯一优势是它更容易设置。但是,您只需设置一次nginx,然后只需部署到配置的Web根目录即可。 Apache可能也会更好地处理负载,但它不是轻量级的,因为它依赖于一种旧的分支进程处理并发的方法,其中Nginx非常类似于node.js

最佳做法绝对是为nginx,CDN或其他Web服务器提供静态文件。在我看来,来自node.js的服务文件通常用于小型,低流量的网站。你可以完全按照你的描述去做。您可以在不同的端口上安装API。最常见的是你在" http://mywebsite.com/"和你的api在一个子域" http://api.mywebsite.com/"。但是,如果您使用不同的端口在同一台计算机上运行,​​则可能比尝试将两个域配置到同一个框更容易。在生产中,我绝对保持端口80并且具有api的子域。

关于veggiesaurus的回答,我不同意。您通常会运行grunt / gulp / similar来缩小和构建您的资产。您可以简单地将资产构建到特定的webroot。然后,您可以在配置文件或环境变量中指定此Web根目录。我个人更喜欢在服务器上构建我的应用程序,因此我可以相应地将我的项目构建到其环境中。构建脚本还可以充当应用程序的启动器,或者为系统创建init脚本,以便确保应用程序继续运行并在崩溃时重新启动。将项目构建包含在您的存储库中是很麻烦的,如果您构建到项目目录之外的路径,那么您不必担心git忽略您的构建。如果你想在那个目录中构建,你可以在那里简单地配置你的web root,但我个人不想这样做。

答案 2 :(得分:0)

如果您的文件都是公开的,您可以将它们全部放在public子文件夹中,并在快递中写几行代码并完成它。您可以看到指南here。至于将ajax请求发送到不同的端口,这绝对有效。您只需要确保将快速服务器配置为侦听该端口。