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根目录,但是我个人更喜欢不这样做。
你要求最佳实践。我有一个网站,它有一个NodeJS + Express后端和AngularJS + Angular-UI/UI-Router前端。我所有的视图都是从Jade模板呈现并以HTML格式输出。您可以在公用文件夹中创建'模板'文件夹,然后以.html格式存储。这是你想要做的吗?这些可以从youwebsite.com/templates/template.html访问,或者像我一样,可以从Jade文件生成模板,该文件通过控制器进行访问验证以及任何其他可能需要做的清理。 –
如果将它们存储在公用文件夹中,则不必为每个文件编写不同的路由。 –