JavaScript堆栈 – Web服务器和API服务器:一起或分开?

我们正在开发一个基于JavaScript框架和库(node,express / sails,angular,mongo等)的大型网页应用程序。

我们需要有一个后端,一方面为Web应用程序提供服务,另一方面接受来自同一应用程序但来自其他来源的数据的API调用 – 这些日子非常普遍。

我们要做的决定之一就是将Web应用程序服务器和API服务器的后端分开,或者将它们放在一起。

例如,我们应该有一个快速运行服务或应该表示服务的Web应用程序,静态内容,身份validation等,并有一个单独的服务数据的Restify服务器。

每个议程有什么优点和缺点?

清晰的关注点总是要走的路。 如果,如你所说,你的API服务器也接受来自其他应用程序的调用,我build议你分开静态文件和你的API的交付。 它让你更灵活地改变其中一种工作方式。 另一个好处是你的API只需要担心API调用,而不是交付,这应该让答案更快。

我将更进一步地说:使用nginx来提供你的静态Web-App文件(如果你不使用服务器端模板)。 另请参阅本主题 – 传递静态资源的nginx速度更快。

在我的公司,这是我们如何为每个应用程序做到这一点,事实certificate,工作很好。

所以优点:

  • 静态交付和API都有更好的性能
  • 清理分离问题
  • 更改一个或另一个更灵活

唯一的con是你需要安装和维护两个程序。 但是鉴于NodeJS非常容易设置,这不应该是一个showstopper。

编辑作为由mnemosyn在评论状态,如果你分开你的应用程序,你仍然应该通过nginx服务器拉每一个请求,以避免一些同源policie问题。 在你的nginx ,你只需要configuration一个指向你的NodeJS-App的虚拟主机,然后代理所有的请求到指定的path(例如/api/ )到VHost。 你可以在这里阅读。