Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript堆栈-Web服务器和API服务器:在一起还是分开?_Javascript_Angularjs_Node.js_Mongodb_Sails.js - Fatal编程技术网

JavaScript堆栈-Web服务器和API服务器:在一起还是分开?

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

我们正在开发一个基于javascript框架和库(node、express/sails、angular、mongo等)的大型web应用程序

我们需要一个后端,一方面为web应用程序提供服务,另一方面接受数据的API调用(来自同一个应用程序,但也来自其他来源)——这在当今非常常见

我们要做的一个决定是,我们应该将Web应用程序服务器和API服务器的后端分开,还是将它们放在一起

例如,我们应该让express同时运行,还是让express为web应用程序、静态内容、身份验证等提供服务,并让单独的Restify服务器为数据提供服务


每个议程的利弊是什么

将关注点彻底分离始终是一条可行之路。如您所说,如果您的API服务器也接受来自其他应用程序的调用,我建议您将静态文件和API的交付分开。它让你在改变一种或另一种工作方式时更加灵活。另一个好处是,您的API只需要担心API调用,而不需要担心交付,这将使其响应更快

我将更进一步地说:使用
nginx
交付静态Web应用程序文件(如果您不使用服务器端模板)。另请参见-nginx在提供静态源时速度更快

在我的公司,这就是我们为每个应用程序所做的,结果证明它工作得非常好

因此,优点是:

  • 静态交付和API都有更好的性能
  • 关注点的清晰分离
  • 更灵活地更改其中一个
唯一的问题是您需要安装和维护两个程序。但是考虑到
NodeJS
非常容易设置,这不应该成为一个障碍

编辑
正如mnemosyn在评论中指出的那样,如果您分离应用程序,您仍然应该通过nginx服务器拉取每个请求,以避免一些同源策略问题。在您的
nginx
中,您只需配置一个指向您的NodeJS应用程序的虚拟主机,然后将所有请求代理到指定路径(例如
/api/
)到该VHost。您可以了解它

不要忘记同源策略:跨站点执行请求非常复杂。你必须在任何地方设置CORS头,不能在没有额外的飞行前请求的情况下使用X头,这些请求不能被缓存,删除和放置需要额外的注意,还有更多的DNS请求,等等。我不会说这是如此明确。如果其他客户机也是web客户机,则没有额外的开销。但是如果其他客户机是服务器客户机,那么额外的工作是巨大的。嗯,对了,我忘了写下你应该通过NGINX代理每个请求,以完全避免这种情况。我要补充一点。谢谢你们的评论,我们正在考虑webapp的节点,因为在上面的静态文件服务中,我们需要它来进行身份验证视图和逻辑。但是同意nginx的优点