此类“标准化构建块”最常见的示例之一被称为“MEAN 堆栈”。了解什么是 MEAN 堆栈、它的工作原理、它的优缺点以及常用方法。
MEAN 堆栈是一个基于 JavaScript 的框架,它可用于开发可扩展的 Web 应用程序。MEAN 一词是 MongoDB、Express、Angular 和 Node 的缩写,而这四种关键技术构成了技术栈的各个层。
目录
虽然 MEAN 堆栈是用于构建 Web 应用程序的最流行技术概念之一,但同时还有其他可用替代方案,包括:
MEAN、MERN 和 MEVN 之间的主要区别在于:它们各自可为前端(例如,客户端)开发提供不同的选项,同时仍利用 MongoDB、Express.js 和 Node.js 进行后端(例如,服务器端)开发。有助于开发者确定采用哪种技术堆栈的因素包括:
MEAN 架构旨在使用 JavaScript 来构建 Web 应用程序,且在处理 JSON 方面非常简单。
位于 MEAN 堆栈最顶端是 Angular.js,它自封为“JavaScript MVW 框架”(MVW 代表“Model View and Whatever(模型视图和其他内容)”)。
Angular.js 允许您使用元数据来扩展 HTML 标签,以便创建动态、交互式的 Web 体验;较之使用静态 HTML 和 JavaScript(或 jQuery)自行构建这些体验,Angular.js 的效率要高得多。
Angular 拥有您期望从前端 JavaScript 框架中获得的所有五花八门的功能,其中包括表单验证、本地化以及与后端服务的通信。
下一级别为 Express.js,它运行于 Node.js 服务器上。Express.js 自称是一个“快速、不固执己见、极简主义的 Node.js Web 框架”,而这确实反映了它的本质。Express.js 具有强大的 URL 路由(将传入 URL 与服务器功能相匹配)以及处理 HTTP 请求和响应的模型。通过从 Angular.js 前端发出 XML HTTP 请求 (XHR)、GET 或 POST,您可以连接到为您的应用程序提供支持的 Express.js 函数。
反过来,这些函数会通过回调或承诺来使用 MongoDB 的 Node.js 驱动程序,以便访问和更新 MongoDB 数据库中的数据。
如果您的应用程序存储有任意数据(用户资料、内容、评论、上传、事件等),则需一个像 Angular、Express 和 Node 一样易于使用的数据库。
这就是 MongoDB 的作用所在:在 Angular.js 前端创建的 JSON 文档可发送到 Express.js 服务器,在此处可对这些文档进行处理并(假设它们有效)直接存储到 MongoDB 中以便后续检索。
如果您想轻松地充分利用 MongoDB,则可查看 MongoDB Atlas。只需点击一下按钮,即可为您提供内置的完整数据库安全性和跨云可扩展性。稍后将在本页上详细介绍。
MEAN 应用程序可通过跨平台、一次写入的方法以多种方式进行使用。虽然 MEAN 特别适合实时应用程序,特别是在云端本地运行的应用程序以及用 Angular.js 构建的单页(动态)Web 应用程序,但它也可用于其他使用案例,例如:
此外,MEAN 堆栈还有更多用途。
由于所有组件均基于 JavaScript 和 JSON,因此该堆栈的各组件之间的集成十分直观和简单。
此外,MEAN 中的 E 和 A(Express 和 Angular)分别为用于后端与前端开发的最流行且支持度最高的两个 JavaScript 框架。Express 可让 HTTP 请求与响应的路由和管理变得非常简单,并且包括对中间件的强大支持,以便处理 JSON 终结点和表单提交。Angular 是一个强大的工具,它可用于构建与后端服务器通信的动态 HTML 页面。
无论您是要构建高吞吐量 API、简易 Web 应用程序还是微服务,MEAN 都是用于构建 Node.js 应用程序的理想堆栈。
所有 MEAN 堆栈组件本质上均可开源获取,因此可为开发者提供一个慷慨的免费机会。
JavaScript 是一种出色的现代语言,但它最初并不是为构建后端服务器而设计的。由于 MEAN 堆栈的基础是 JavaScript(包括后端服务器),因此鉴于 JavaScript 的性质,它可能会引发大规模的并发与性能问题。此外,由于此开发机会转瞬即逝,业务与服务器逻辑可能会受到较差隔离性的影响,从而使潜在的意大利面条式代码和不良实践成为现实。最后,虽然市面上有很多指南和教程,但它们通常不包含适用于此堆栈的具体 JS 编码指南。因此,对一个应用程序来说运行良好的特性则可能会给另一应用程序造成问题。
MEAN 遵循传统“三层堆栈模式”,其中包括显示层 (Angular.js)、应用程序层(Express 和 Node.js)和数据库层(MongoDB)。如果您正在构建 JavaScript 应用程序,尤其是在 Node.js 中,则应认真考虑 MEAN。
MongoDB 会以类似 JSON 的格式(BSON,一种二进制 JSON 扩展)存储数据,而 MongoDB 查询 API 以 JSON 进行定义,且其命令行界面 (CLI) 是一种 JavaScript 解释器。MongoDB 本质上不仅是一个 JavaScript/JSON 数据存储,同时还具有索引编制和深入查询 JSON 文档等高级功能,以及强大的原生 Node.js 驱动程序,且专为横向扩展而设计。使用 MongoDB Atlas 在云端开发应用甚至更为容易,它是 MongoDB 的创建者提供的一种“云原生数据库即服务”。
无论您是要构建高吞吐量 API、简易 Web 应用程序还是微服务,MEAN 都是用于构建 Node.js 应用程序的理想堆栈。
MongoDB Node.js 驱动程序 有助于开发者简单直观地在 Node.js 脚本内使用 MongoDB,从而节省时间并提高工作效率。
接下来,您需要一个 MongoDB 数据库。开始使用 MongoDB 的最简单方法是在 MongoDB Atlas 中创建一个免费集群,而该工具是 MongoDB 的全托管开发者数据平台。
Atlas 数据库易于部署和扩展,因而可为您提供一致的 URI 来进行连接。请参阅关于连接到集群的官方 MongoDB 文档。
在此过程中,Atlas 连接默认附带内置用户名/密码和 TLS 端到端加密。此外,这些连接还允许您通过单击某一按钮来利用高级 MongoDB 安全功能;例如,证书/IAM 身份验证、LDAP、静态加密和审计。此外,Atlas 项目还可利用 Atlas App Services 应用程序平台来轻松集成众多身份验证提供者,例如 Google、Facebook、JWT 和自定义身份验证。
扩展和管理 Atlas 非常简单;它的最大好处在于:它支持且可保护 MEAN 堆栈最有价值的层:数据层。
我们建议将 MEAN 堆栈与 MongoDB Atlas 一起使用,因为 Atlas 具有内置凭证、防火墙和端到端加密功能,而它们是保护 MongoDB 的最佳基础。
此外,MEAN 堆栈具有具体的三层分离机制;如果与最佳实践和正确的网络隔离搭配使用,应可阻止最终用户访问业务逻辑,甚至是数据库层。因此,您的应用程序默认会被设计为避免恶意用户交互致使应用程序面临风险(查询注入、代码操纵、端口欺骗等)。
MEAN 堆栈基础建立在直观的 JavaScript 开发之上,且是适用于 MongoDB 等 JSON 结构的天然数据库,因此该解决方案易于调整和维护。很多开发者发现,MEAN 堆栈比其他选项更易学习。
学习 MEAN 栈的难易程度和速度还取决于以下几个因素:
话虽如此,学习 MEAN 堆栈当然没有必要具备所有这些知识。有大量在线教程、课程和社区,可帮助您获取 MEAN 堆栈开发所需的知识和技能。
全堆栈与 MEAN 堆栈有何区别? MEAN 堆栈和全堆栈均包含前端(如客户端)、后端(服务器端)和数据库开发。然而,全栈开发者的知识通常比 MEAN 堆栈构建块包含更广泛且更深入的技能和技术。全栈开发者掌握的其他知识的示例包括: