我正在开发一个Web应用程序,客户端是一个angularJS应用程序,旨在使用My REST服务器端API,因此我公共目录中的所有文件都是静态的。
我想尝试使用NodeJS + express来制作我的服务器端API,因为我已经听过很多这样的内容,我接受了很多教程,现在我明白了如何制作API。
但我不明白为什么服务我的静态文件感觉如此复杂,我已经使用了很多LAMP堆栈并使用它来提供静态内容很容易,甚至不是一行代码。使用节点似乎我必须为每个文件写路由?
我已经读过有关使用apache来提供静态内容并拥有应用程序引用节点的人,如何做到这一点?我可以将客户端ajax请求指向另一个端口,并在服务器上的该端口上运行节点,还是需要另一个ip?
这是什么最好的做法?
答案 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请求发送到不同的端口,这绝对有效。您只需要确保将快速服务器配置为侦听该端口。