65.9K
CodeProject 正在变化。 阅读更多。
Home

MEAN Web 开发 #1:MEAN 是什么以及为什么使用它

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.89/5 (15投票s)

2015年4月20日

CPOL

11分钟阅读

viewsIcon

31429

这一系列关于 MEAN Web 开发的文章的开篇之作。

是的,又一篇新博文,又一个新系列!很抱歉上周没有发帖,我有点忙。我会努力弥补,开始一个关于 MEAN Web 开发的精彩系列。
我一直在 Twitter 上发关于 MEAN 及相关技术的推文,所以请务必关注我 @sanderrossel

但是,MEAN 是什么?你为什么要了解并使用它?这就是我们将在第一集中探讨的内容。我们还将设置好我们的开发环境。在接下来的文章中,我们将更详细地探讨 MEAN 所涉及的每一项技术。

  1. MEAN Web 开发 #1:MEAN 是什么以及为什么使用它
  2. MEAN Web 开发 #2:Node.js 在后端
  3. MEAN Web 开发 #3:更多 Node.js
  4. MEAN Web 开发 #4:Node.js Express 全面起航!
  5. MEAN Web 开发 #5:Jade 和 Express
  6. MEAN Web 开发 #6:AngularJS 在前端
  7. MEAN Web 开发 #7:MongoDB 和 Mongoose
  8. MEAN Web 开发 #8:Sockets 将让你大吃一惊!
  9. MEAN Web 开发 #9:一些最后的说明

 是什么

那么,MEAN 是什么?我可以称你为傻瓜,因为你不知道,这很“mean”(而且不公平,因为你会在几秒钟内知道),但这并不是我说的“mean”!MEAN 其实是一个首字母缩写(因为我们在 IT 行业喜欢首字母缩写),它代表 MongoDBExpressAngularJSNode.js。你可能听说过它们,如果读过我之前的博文 Web 开发 #8:接下来该做什么,你甚至知道一点它们是什么(当然,你也可以从其他地方获得这些信息)。
简而言之,MongoDB 是一个 NoSQL 文档模型数据库,Node.js 是一个允许你在 Web 服务器上运行 JavaScript 的平台,Express 是一个简化与 Node.js 协同工作的库,AngularJS 是一个前端框架,它允许你创建单页应用程序(SPA)。

别担心,我们稍后会更详细地介绍所有这些。事实上,我在之前的博文中已经写过关于 MongoDB 的内容,初探 NoSQL 和 MongoDB。实际上,我稍后会让你阅读那篇文章。

所以,事情是这样的:MongoDB 是一个不使用 SQL 的数据库,而是使用 JavaScript 作为查询语言;Node.js 是一个让你在后端使用 JavaScript 的平台;AngularJS 是一个用于前端的 JavaScript 库;Express 只是 Node.js 的一个库。所以,你的整个技术栈都使用 JavaScript!这很棒,尤其是如果你是 JavaScript 的粉丝。

你很可能还会使用其他技术,而不仅仅是 MEAN。MEAN 只是一个起点,当然,你可以自由添加(或删除)任何你喜欢的东西。也许是 jQuery UI,像 Jade 这样的 HTML 生成器,或者 sockets.io,一个用于在 Node.js 中处理套接字的库。

为什么

那么,为什么你会在其他技术之上选择 MEAN 呢?事情是这样的,我对任何技术都没有宗教般的狂热,你可以用其他技术完成你用 MEAN 能做到的任何事情。SQL Server 和 C# 也很不错,尤其是在结合 SignalR 时,但那样的话,你的数据库里就有 SQL,你的后端就有 C#,你的浏览器里就有 JavaScript。所以,能够只使用一种语言(不幸的是,这种语言是 JavaScript)就可以被认为是一个优点。

让我们来看看为什么要单独使用 MEAN 的每个字母。
MongoDB 是一个非常灵活的数据库,它有点像你已知的关系型数据库。然而,MongoDB 是无模式的,所以添加任何字段都轻而易举(无需生产停机!)。这对于拥有大量数据的巨大表来说尤其方便。我知道在大型表上向任何 SQL 数据库添加字段都可能是一个挑战,因为你的整个表都必须更新。此外,MongoDB 的扩展性很好,比大多数 SQL 数据库都好。实际上,关于为什么想使用 MongoDB,就读我的 NoSQL 和 MongoDB 文章吧,初探 NoSQL 和 MongoDB

Node.js 实际上是 Apache 或 IIS(Internet Information Services)等流行 Web 服务器的替代品。那么 Node.js 与这两个(以及其他)有什么不同呢?嗯,Apache 和 IIS 都使用线程监听传入的 HTTP 请求。这意味着许多不同的“进程”(线程)在监听传入的请求并处理它们。这意味着如果所有线程都忙,在那时将无法处理新请求,你的服务器响应就会变慢。
相比之下,Node.js 只使用一个线程来监听传入的 HTTP 请求。它所做的是监听一个传入的请求,将其放入一个堆栈,然后在另一个线程上处理它。这个过程非常快(如果你做得对),Node.js 应该能够处理比 Apache 或 IIS 更多的并发连接。当然,如果你在 Node.js 中搞砸了,你也会阻塞所有其他人。
如果你要使用 Node.js,你很可能也会使用 Express,因为它确实使 Node.js 开发更容易(当然,你可以完全自由地进行一点“MAN”开发 :))。

你为什么想使用 AngularJS 呢?AngularJS 是一个用于创建单页应用程序的框架。在“传统”网页上,你的页面需要为每个服务器请求完全刷新。所以想象一下,你在一个网上商店,正在阅读产品评论。每页有十条评论,你刚刚读完第十条。当你点击“下一页”时,整个页面都会刷新。服务器将整个 HTML、产品图片(如果你的浏览器没有缓存)、产品描述、其他推荐产品等发送到你的浏览器。这是你已经拥有的海量信息!在 SPA 中,你只会发送新的十条产品评论,并用新的评论替换旧的评论(例如使用 jQuery 或 AngularJS)。
因此,一个精心设计的 SPA 会比传统应用程序更快、更好用。当然,你可以使用 jQuery 进行 AJAX 请求和 DOM 操作,但 AngularJS 是一个为此类特定情况而构建的框架,而 jQuery 则更通用。因此,在构建 SPA 时,AngularJS 可能是一个不错的选择。当然,如果你愿意,可以用另一个框架替换 AngularJS,也许是 Ember.jsBackbone.js,你就可以进行 MEEN 或 MEBN 开发了(我只是随便说说的,但为什么不行呢,对吧?)。

将它们放在一起,MEAN 就是一个全 JavaScript 的技术栈,它快速、响应迅速且灵活。我提到它是开源的,所以可以免费使用吗?这很棒!

设置你的环境

MongoDB

让我们开始吧,好吗?我们先来设置 MongoDB。正如我提到的,我已经在之前的文章中写过关于 MongoDB 的内容,初探 NoSQL 和 MongoDB。幸运的是,我也描述了如何设置 MongoDB,所以我建议你阅读那篇文章,特别是“开始使用 MongoDB”部分(你可以跳过 C# 部分)。自从几个月前我写那篇文章以来,情况几乎没有改变,但我会简要讨论差异。你可以从 下载页面 下载 MongoDB。默认安装路径已更改为“C:\Program Files\MongoDB\Server\3.0\bin”。你可以通过命令行运行 MongoDB,或者直接运行 mongod.exe。
你还应该安装 MongoVUE,就像在博文中描述的那样。我会在本系列中一直使用它。第一次启动 MongoVUE 时,你需要指定一个连接。给它起任何你喜欢的名字,将服务器设置为“localhost”,这样就可以了。除此之外,我认为 MongoVUE 是相当不言自明的,特别是如果你使用过 SQL Server。

Node.js

那么,接下来我们来设置 Node.js。前往 nodejs.org 并点击大的绿色安装按钮。它应该会为你提供适合你系统的安装程序(我假设你使用的是 Windows 机器)。当然,你也可以通过访问 下载页面 手动选择安装程序。然后只需运行安装程序,并确保你也安装了 npm 包管理器。实际上,只需安装所有内容。安装完成后,你可以从命令提示符运行任何 Node.js 应用程序(它实际上只是一个 JavaScript 或 .js 文件)。而且,既然我们谈论这个话题,我想创造一个新术语 CPDD,命令行驱动开发(好吧,这只是个玩笑)。为什么我们在 2015 年还在使用命令行!所以我不喜欢命令行,因为它需要输入很多内容,而且我总是忘记该输入什么。如果你和我一样,别担心,我为你准备好了!

既然我们在做这件事,我们来创建一个非常简单的“hello world!”。我们将看到 Node.js 的实际运行,并且能够使用命令行启动它。所以,我们首先创建一个用于我们“项目”的文件夹。我把它放在 C:\dev\hellonode\,在那里我创建了一个名为 hellonode.js 的文件。现在将以下代码放入该文件中。

var http = require('http');
http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello, Node.js!');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');

如你所见,它只是 JavaScript。这个例子取自 Node.js 主页。所以,我们首先通过调用 require 函数并传入字符串(id)‘http’来创建一个 http 模块的实例。当我们有了 http 对象后,我们调用 createServer 函数,并将一个函数作为唯一的参数传入。该函数有两个参数:request(HTTP 请求)和 response。所以,每当服务器收到一个 HTTP 请求时,这个函数就会被调用,我们可以检查方法(GET、POST 等)、任何参数以及发送请求的任何内容。不过,这里我们并不真正关心这些,因为每次收到请求时,我们都只会发送相同的结果。我们在结果头中写入 HTTP 状态码 200(OK)和内容类型文本,并通过调用 end 函数并将文本“Hello, Node.js!”传递给它来结束请求。
createServer 函数返回一个 Server 对象。我们在 Server 对象上调用 listen,传入端口和 IP 地址(示例中是 localhost),此时我们的服务器就会启动并监听请求。

如果你不理解也没关系。我们将在以后的文章中更详细地介绍 Node.js。现在,要运行它,打开一个命令提示符,然后键入以下命令(不包括双引号“”):“node C:\dev\hellonode\hellonode.js”,你应该会看到你的服务器正在运行。现在浏览到 localhost:1337,你应该会在浏览器窗口中看到“Hello, Node.js!”。
恭喜你,你刚刚创建了你的第一个 Node.js 应用!

Express 和 npm

接下来,我们需要安装 Express。我们将使用 npm 来完成。npm 是一个 JavaScript 包管理器,它是 Node.js 的默认包管理器。也有 Bower 等替代方案,但我们只坚持使用 npm。所以,打开另一个命令提示符(真烦人!)。首先,我们要确保 npm 是最新版本。我们可以使用以下命令发出更新命令:“npm install npm -g”。之后,使用命令“cd C:\dev\hellonode”移动到你的项目所在的文件夹,然后使用命令“npm install express”来实际将 Express 安装到你的项目中。要卸载 express,可以使用命令“npm uninstall express”。
或者,你可以创建一个名为 package.json 的小型文件,并在其中放入以下 JSON。

{
  "name": "hellonode",
  "version": "1.0.0"
}

现在,在安装或卸载包时,在命令末尾添加 –save,如下所示:“npm install express –save”和“npm uninstall express –save”,npm 将在此文件中跟踪依赖项。例如,在安装 Express 时,你的 packages.json 文件将如下所示。

{
  "name": "hellonode",
  "version": "1.0.0",
  "dependencies": {
    "express": "^4.12.3"
  }
}

为了确保它真的有效,你可以创建一个名为 helloexpress.js 的 JavaScript 文件,并尝试使用 Express “Hello World” 示例页面中的 Hello world 示例。通过从命令提示符运行以下命令来尝试它:“node C:\devhellonode\helloexpress.js”,然后浏览到 localhost:3000

就是这样!我们对 MEAN 有了一个初步的了解,我们已经成功启动并运行了 MongoDB 和 Node.js,并且我们使用 npm 安装了 Express。我在这里没有讨论 AngularJS,因为我们在之前的博文中已经看过如何向我们的页面添加前端库,例如 Web 开发 #6:使用 JavaScript 进行交互。当我发布关于 AngularJS 的文章时,我们仍然会设置 AngularJS。

在接下来的文章中,我们将更详细地探讨 MongoDB、Node.js、Express 和 AngularJS,看看它们是如何协同工作的。
我期待着阅读你的评论,希望在下一篇文章中再次见到你。

敬请期待!

文章 MEAN Web 开发 #1:MEAN 是什么以及为什么使用它 最初发表于 Sander's bits

© . All rights reserved.