2015-07-20 31 views
1

我正在开发一个web应用程序,客户端是一个用于使用我的REST服务器端API的angularJS应用程序,因此我公共目录中的所有文件都是静态的。服务我的angularJS web应用静态内容,nodeJS或apache?

我想尝试NodeJS + express来制作我的服务器端API,因为我听过这么多,我浏览了很多教程,现在我明白了如何制作API。

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

我已阅读过有关使用apache提供静态内容并拥有应用程序参考节点的人,那该怎么办?我可以将我的客户端ajax请求指向不同的端口,并让节点在服务器上的该端口上运行,或者我需要另一个IP?

这方面的最佳做法是什么?

+0

你要求最佳实践。我有一个网站,它有一个NodeJS + Express后端和AngularJS + Angular-UI/UI-Router前端。我所有的视图都是从Jade模板呈现并以HTML格式输出。您可以在公用文件夹中创建'模板'文件夹,然后以.html格式存储。这是你想要做的吗?这些可以从youwebsite.com/templates/template.html访问,或者像我一样,可以从Jade文件生成模板,该文件通过控制器进行访问验证以及任何其他可能需要做的清理。 –

+0

如果将它们存储在公用文件夹中,则不必为每个文件编写不同的路由。 –

回答

3

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

从nodejs提供的静态文件的一个问题是它不处理像缓存,缓存控制,url_rewriting和DoS攻击提供的安全性。我真的推荐在生产中使用nginx来提供静态资产,或者CDN,可能是2的组合。您不希望从您的API提供资产,它有一个明确的分隔线以便您可以扩展每个人单独,因为它的可能你的API将需要更快地扩展。

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

最佳实践是绝对静态服务文件有一些像nginx,CDN或其他网络服务器这样的文件。在我看来,从node.js提供文件通常用于小型,低流量的网站。你可以完全按照你的描述。你可以在不同的端口上使用你的API。最常见的是你的“http://mywebsite.com/”你的UI和子域“http://api.mywebsite.com/”上的你的API。但是,如果您使用不同的端口运行同一台计算机,则可能比尝试将两个域配置到同一个框更容易。在制作过程中,我一定会保留在端口80上,并为api提供一个子域。

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

+0

感谢所有有用的信息!我没有使用Nginx作为apache的替代品,但我一定会考虑它! 我也从来不知道CDN将主办一个网站资源,我只消耗它们来获得图书馆等! –

+0

CDN可以处理任何类型的静态资产。您可以从技术上将您的整个前端放在CDN上,前提是它的所有静态资源都是角度前端特别常见的。 Nginx的配置非常简单。有很多指南。我个人喜欢数字海洋提供的知识库,因为他们的大多数指南并不针对他们的平台。 – tsturzl

+0

@tsturzl我无法在类似的问题上得到任何答案(不同的执行方式)。你可以看看一样吗? – gonephishing

0

如果您的文件都是公开的,您可以将它们全部放在public子文件夹中,然后用快写几行代码并完成它。你可以看到一个指南here。至于向另一个端口发出ajax请求,这绝对有效。你只需要确保你配置你的express服务器来侦听那个端口。

5

服务上的NodeJS静态文件是超级容易,只要所有这些文件添加到一个公用文件夹和下面的中间件添加到您的快递应用:

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

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

相关问题