# 工作的程序员如何成为平均: Node.js
通过 [Ted Neward](https://msdn.microsoft.com/zh-cn/magazine/mt149362?author=Ted+Neward) | 2015 年 9 月
![](https://box.kancloud.cn/2016-01-08_568f2a84072a2.jpg)
Microsoft 已作为其添加品牌名称和"re relevancing"的一部分各软件采用的技术 它已采用的技术之一是 Node.js。这为开发人员提供了绝佳的机会在称为平均值 Node.js 平台上使用更受欢迎的完整堆栈软件分组之一: MongoDB、 Express、 AngularJS 和 Node.js。
在上一期 ([msdn.microsoft.com/magazine/mt185576](https://msdn.microsoft.com/magazine/mt185576)),我获得了基本的 Node.js 部分启动并运行。在这篇文章,我启动一个简单的节点"Hello World"Web 终结点,并将其部署到 Microsoft Azure 网站。通过下一步的几个部分,我将缓慢生成自己的平均堆栈的方式工作的基础知识。
如在上一篇文章中所述,有很多地方其中我可以交换出的平均堆栈部分处理其他事情 — MongoDB、 用于 Node.js 的 ASP.NET WebAPI 和 Express 或 BackboneJS 为 ASP.NET MVC (或任何其他 JavaScript 单个页-应用程序框架的整个主机) 的 AngularJS DocumentDB — 但无替代项喜欢平均值当前持有的普及 (至少在 JavaScript 迷们之间)。
## Node.js
Node.js 是从根本上只"使用 JavaScript 在服务器上的。" 是的尝试处理并发执行的 Node.js 到不同的编程方法。而不是调用的块,程序员将传递在函数中文字在操作完成时要调用。这样开发人员考虑将代码作为单线程,即使多个线程都在面下方的使用也是如此。总的来说,然而,Node.js 的最大区别是您使用 JavaScript 构建的服务器组件,而不是 C#、 Java 或 Ruby。在这种意义上,它是实际上只是更改风景 — 不是完全不同的世界。
最简单的 Node.js 应用程序,当然是无处不在"Hello,World,"它可以轻松编写使用内置的控制台对象:
~~~
console.log("Howdy, NodeJS!");
~~~
假设这进入名 hello.js 为当前目录中的文件,您将使用运行该节点实用工具在命令行使用节点 hello.js。或者可以让 Node.js 推断的文件扩展名的只是正在运行"节点 hello"。 无论哪种方式,节点当天向您问候的传统方法中。
与大多数编程平台,Node.js 在初始状态下有其自己的库和 Api 集。正如我指出了最后一次,使用 Node.js 需要用于引用已安装的库的约定。将捕获到具有相同名称的局部变量的返回的对象。因此,例如,如果我想要编写一个将有效地为我提供相同的问候语通过 HTTP 协议的简单 HTTP 服务器,我可以将以下内容放到简单 helloHTTP.js 文件:
~~~
var http = require('http');
var port = process.env.PORT || 3000;
http.createServer(function(req, res) {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello World\n');
}).listen(port);
~~~
需要行查找 Node.js 安装过程中,在"http"库并将其存储到依赖关系注入中的 http 对象。这是标准的 Node.js 约定,并且应保留为相当 sacrosanct。第二行使用内置的进程对象来访问周围的环境。在这种情况下,它使用的进程对象中的"env"对象以确定是否将一个名为端口的环境变量设置为任何内容。如果是,我将使用,作为在其上运行服务器的端口。否则,我将使用默认端口 3000。许多 Node.js 框架更喜欢作为默认情况下,端口 3000 晦涩历史和文化的原因。
Node.js 编程的性质变得更清晰的下一步的几行中。我使用的 http 对象以创建 HTTP 服务器。唯一的参数是原义一个函数,将请求 (HTTP 请求) 对象和 res (HTTP 响应) 对象作为参数,并使用 res 将写回的 HTTP 响应。此习惯用法是无处不在整个 Node.js 堆栈的所有级别。
这是那些"您喜欢它或您不喜欢"的一类问题之一。您将看到的此文章来形成中的详细信息。因此如果这不是清除,花些时间来尝试。从 createServer 返回的对象然后绑定到使用侦听调用所需的端口。您瞧,您有一个正在运行的 HTTP 服务器您就可以轻松地运行使用"节点 helloHTTP"和浏览器指向 http://localhost:3000/。
## Azure 命令行工具
从我的上一篇文章,您会记得 Node.js 有一个名为 Node 包管理器 (npm) 的可用于下载的依赖库的包实用工具。您可以使用它来下载然后可以使用的工具从命令行。这是 Node.js 细微,但功能强大,方面。它将充当平台无关"生存区均衡器。"
您可以有效地隐藏背后的 JavaScript 脚本墙 Windows、 Mac OS 或 Linux 任何区别。Microsoft 选取在这不久,并打包到调用 azure cli 的 Node.js 包的一组的命令行工具。将它安装是借助 npm 轻松:
~~~
npm install –g azure-cli
~~~
-G 标志告诉 npm 以"全局"安装的工具 (这意味着这些产品不依赖于在其中运行该命令的本地目录)。这样生成的包可用于整个系统内。完成后,一个新命令行实用工具,azure 之前,将可供使用。Azure cli 程序包未提供任何更高或更低的功能比使用 Azure 门户。Azure cli 工具的优点在于它可以作为一部分的自动化的脚本 azure 命令部署系统中,例如所示。
## 将部署到 Azure
因此,如果您希望此可爱小问候供 Internet 上的世界,您需要创建 Azure 网站作为主机。使用"azure"工具,该命令相当简单。首先,您需要将该工具绑定到在 Azure 中的帐户:
~~~
azure account download
~~~
此操作将启动系统的默认浏览器指向 Azure 登录门户。使用 Azure 帐户凭据登录。完成后,它将自动下载的 publishSettings 文件包含的凭据信息的 azure 工具需要,可以直接导入:
~~~
azure account import <filename>
~~~
文件名通常会类似于"Visual Studio Ultimate with MSDN-4-23-2015年-credentials.publishsettings,"具体取决于 Azure 订阅详细信息和下载的 publishSettings 文件的日期。完成后,很简单,只需通过设置 Git 进行部署到站点创建新的 Azure 网站:
~~~
azure site create –git
~~~
这将提示输入站点名称和 (假定该名称唯一的) 启动相应的 Web 站点。如果所有的工作原理,运转当前目录作为 git 初始化本地存储库。假设您仍处于保存从之前的 helloHTTP.js 文件的同一个目录,可以将其添加到 Git 存储库并将其推送到 Azure 云:
~~~
git add helloHTTP.js
git commit –m "Initial commit"
git push azure master
~~~
Git 将考虑一下几秒钟。然后它将经历一系列的暂时保持不透明的步骤。在完成,不过,Azure 将保存新的 Node.js 代码,并且您可以浏览到它,如中所示 图 1。
![](https://box.kancloud.cn/2016-01-08_568f81ed6890d.png)
图 1 Hello,World 节点
这就是原因 helloHTTP 代码将使用默认端口 3000 或从周围的进程的环境变量端口。在 Azure 云,即会将端口设置为 Azure 基础结构将保留一个值。这是以便 Microsoft 可以更有效地管理各种服务终结点。
这确实是您需要执行的安装步骤的上一次。坦率地讲,花费的时间以实际运行命令,一旦您已完成初始安装阶段不会超过阅读有关它的信息。并且甚至更坦率地讲,任何 Azure 工作或浏览需要相似类型的安装程序。Azure 真实表示很多开发工作的下一步平台。换而言之,这是您需要知道如何执行最终,因此您可能也了解它现在。
在这里,几乎一切都将与平均值相关。您将需要将注意到的 Azure 详细信息的唯一时间是当您需要配置环境以指向 MongoDB 数据库服务器上,例如,或者在处理与 Node.js Azure 交互的方式时。
## 总结
值得指出 Node.js 不只是 HTTP 管道。事实上,节点都可以通过打开正确的库运行任何类型的网络应用程序。这同样适用的 Microsoft.NET Framework。但是,如.NET Framework 中,大多数的 Node.js 应用程序会采用基于 HTTP 的本质。
在 Node.js 中的 http 库是相当低级别。结果是,Node.js 社区开发了一个更高级别的的库和组的抽象来简化基于 HTTP 的终结点处理。此库称为速成版。它允许您构建哪些的 Node.js 社区调用"中间件。" 这就是什么我需要查看下一次。
现在,试验 Node.js http 库中,但不获取太连接,因为我将会留下它非常快速一旦我进入下一次迭代。在此期间,但是...
祝您编码愉快。
* * *
Ted Neward *是 itrellis 一家咨询服务公司首席技术官。他已编写的 100 多篇文章和编写或与他人合著过十几本书,包括"Professional F # 2.0 》 (Wrox,2010 年)。他是 F # MVP,经常在世界各地的会议上。他定期担任顾问和导师,如果您感兴趣,请通过 [ted@tedneward.com](mailto:ted@tedneward.com) 或 [ted@itrellis.com](mailto:ted@itrellis.com) 与他联系。*
- 介绍
- 云连接移动应用 - 借助身份验证和离线支持构建 Xamarin 应用
- 崛起 - 自由 Internet 广播
- Microsoft Azure - 云中的容错问题和解决方法
- 最前沿 - 适合常见应用程序的事件源
- Azure 深入了解 - 跨云平台创建统一的 Heroku 式工作流
- 借助 C++ 进行 Windows 开发 - Windows 运行时中的高级类型
- 编译器优化 - 借助按本机配置优化来简化代码
- 数据点 - 再探 JavaScript 数据绑定(现在包含 Aurelia)
- 云安全 - 借助 Azure 密钥保管库保护敏感信息的安全
- 测试运行 - 借助人工尖峰神经元进行计算
- 开发运营 - 在 Microsoft 堆栈上启用开发运营
- 孜孜不倦的程序员 - 如何成为 MEAN: Node.js
- 新型应用 - 提升新型应用的易用性的做法
- 别让我打开话匣子 - Darwin 的照相机
- 编辑寄语 - 汽车 Internet 发生故障