JavaScript堆栈-Web服务器和API服务器:在一起还是分开?
我们正在开发一个基于javascript框架和库(node、express/sails、angular、mongo等)的大型web应用程序 我们需要一个后端,一方面为web应用程序提供服务,另一方面接受数据的API调用(来自同一个应用程序,但也来自其他来源)——这在当今非常常见 我们要做的一个决定是,我们应该将Web应用程序服务器和API服务器的后端分开,还是将它们放在一起 例如,我们应该让express同时运行,还是让express为web应用程序、静态内容、身份验证等提供服务,并让单独的Restify服务器为数据提供服务JavaScript堆栈-Web服务器和API服务器:在一起还是分开?,javascript,angularjs,node.js,mongodb,sails.js,Javascript,Angularjs,Node.js,Mongodb,Sails.js,我们正在开发一个基于javascript框架和库(node、express/sails、angular、mongo等)的大型web应用程序 我们需要一个后端,一方面为web应用程序提供服务,另一方面接受数据的API调用(来自同一个应用程序,但也来自其他来源)——这在当今非常常见 我们要做的一个决定是,我们应该将Web应用程序服务器和API服务器的后端分开,还是将它们放在一起 例如,我们应该让express同时运行,还是让express为web应用程序、静态内容、身份验证等提供服务,并让单独的Re
每个议程的利弊是什么 将关注点彻底分离始终是一条可行之路。如您所说,如果您的API服务器也接受来自其他应用程序的调用,我建议您将静态文件和API的交付分开。它让你在改变一种或另一种工作方式时更加灵活。另一个好处是,您的API只需要担心API调用,而不需要担心交付,这将使其响应更快 我将更进一步地说:使用
nginx
交付静态Web应用程序文件(如果您不使用服务器端模板)。另请参见-nginx在提供静态源时速度更快
在我的公司,这就是我们为每个应用程序所做的,结果证明它工作得非常好
因此,优点是:
- 静态交付和API都有更好的性能
- 关注点的清晰分离
- 更灵活地更改其中一个
NodeJS
非常容易设置,这不应该成为一个障碍
编辑
正如mnemosyn在评论中指出的那样,如果您分离应用程序,您仍然应该通过nginx服务器拉取每个请求,以避免一些同源策略问题。在您的
nginx
中,您只需配置一个指向您的NodeJS应用程序的虚拟主机,然后将所有请求代理到指定路径(例如/api/
)到该VHost。您可以了解它不要忘记同源策略:跨站点执行请求非常复杂。你必须在任何地方设置CORS头,不能在没有额外的飞行前请求的情况下使用X头,这些请求不能被缓存,删除和放置需要额外的注意,还有更多的DNS请求,等等。我不会说这是如此明确。如果其他客户机也是web客户机,则没有额外的开销。但是如果其他客户机是服务器客户机,那么额外的工作是巨大的。嗯,对了,我忘了写下你应该通过NGINX代理每个请求,以完全避免这种情况。我要补充一点。谢谢你们的评论,我们正在考虑webapp的节点,因为在上面的静态文件服务中,我们需要它来进行身份验证视图和逻辑。但是同意nginx的优点