用全栈javascript分离前端和后端的方法?


31

假设我有一个前端,该前端主要是一个单页面的应用程序,它是使用angular,grunt和bower编写的。假设我有一个后端,主要是一个坐在ORM之上的REST API,它使用grunt,express和sequelize之类的东西从数据库中存储/检索对象。

角度应用程序执行用户看到的所有可视化内容,但是它是通过后端提供的服务上的GUI来完成的。

希望将它们分成两个不同的代码库,以允许独立开发,版本控制,持续集成,推送到开发等。

我的问题是,有什么方法可以干净地进行此操作?是否有针对全栈javascript的推荐最佳实践?

选项#1似乎是一个整体,即“不要将它们分开”。优点是构建链很简单,而且一切都集中在一个地方-但似乎有很多弊端。很难独立版本化,正面折断意味着背面无法展开,依此类推。

选项#2似乎是一个准整体,其中前端构建链导致将一堆文件写入后端。dist前端的目录将引用后端的某个目录,因此从本质上讲,当前端最小化,丑化等等时,它最终将发布到后端,后端将运行所有内容。

选项#3似乎是完全分开的:前端和后端各自在不同的端口上运行各自的服务器,并且它们是完全独立的项目。缺点似乎是需要将它们配置为了解彼此的端口。后端必须允许来自前端的CORS,并且前端需要知道所有这些端点的预期位置。

选项#4可能是使用docker-compose之类的东西将整个东西装配在一起。

我确定还有其他选择。建议的最佳做法是什么?

Answers:


18

这是一个前端,后端应用程序,两者之间具有REST接口。您已经完全分开了。

我的投票是关于选项3的。您似乎对配置感到担心,但这很重要。通过配置,您可以完全分离,而无需紧密耦合的代码绑定。如果您担心CORS,请将所有内容都放在一个域中。如果您必须具有CORS,那么管理该文件的最佳方法是配置。

但是这里没有“最佳实践”。最佳实践是最能满足您的特定需求的实践。


2
如果它们是两个单独的服务器,您如何将所有内容放到一个域中?即使它们在同一主机上运行,​​它们也必须位于不同的端口上,从而使它们成为不同的来源。
FrobberOfBits 2015年

1
如果没有最佳实践,是否提供有关如何完成此配置的示例?
FrobberOfBits 2015年

7
你可以把一个反向代理(nginx的),在应用程序的前面,安装/位置localhost:3000(前端服务器),并/api/localhost:3001(API服务器)。然后,nginx将监听默认的http端口。
nvartolomei

@nvartolomei我同意使用反向代理。有没有一种方法可以在后端和前端之间干净地共享一些信息,例如路由信息?另外,将反向代理指向CDN容易吗?
Andrew Allbright

6

是的,您应该将两者分开,并将前端应用程序视为第三方应用程序-您最终可能会添加另一个客户端,例如移动应用程序,如果以这种方式构建了第一个客户端,您的生活将会更加轻松。

使用docker容器或其他部署系统主要涉及后端,因为您应用的前端只是需要解决的静态资产。您可以将这些资产静态托管在服务器中,也可以将其托管在CDN之类的其他地方,例如cloudfront。

避免使用cors可以为您节省一些配置,但是正如上面提到的那样,这很重要。使用cors(和令牌身份验证)也可以更好地为其他客户端准备后端。

编辑:就全栈js最佳实践而言,我要说的是保持一致。如果您正在使用诺言(并且应该这样做),那么请双方都这样做。保持相同的js样式和格式,使用相同的测试库(如果可能),等等。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.