# 工作的程序员如何成为平均: 快速安装
通过 [Ted Neward](https://msdn.microsoft.com/zh-cn/magazine/mt149362?author=Ted+Neward) | 2015 年 10 月
MongoDB、 Express、 AngularJS,Node.js (平均值) 堆栈是一种替代方法"Web 堆栈"(有人说互为补充其他人的意见增补) 到 ASP.NET 栈的.NET 开发人员都习惯。本期内容中将标记中我将在其中介绍处理 HTTP 处理在服务器上的 Express 库的一系列的第三。
在上一期 ([msdn.microsoft.com/magazine/mt422588](https://msdn.microsoft.com/magazine/mt422588)),我介绍了如何将 Node.js 应用程序安装到 Microsoft Azure。由于执行此操作是实质上是只需提交到 Git 存储库 (,然后将这些提交推送到 Azure 的远程存储库),我将这些扩展在此和将来的专栏,至少直到我开始在 Azure 平台上的其他服务 (如 MongoDB) 通话。或者,可以运行在本地计算机上的所有示例以追踪它。Azure 肯定不是必需 (至少会在我开始讨论将推送到生产环境)。
## 获取有关速成版
所有训练双关语放在一边,Express 是一个非常简单的库。很容易地使用,一旦您接受"Node.js 方式。" 只是为了保持认知负载方面 light,我将首先从零开始 (相对而言)。我假设您有一个全新的 Azure 站点 (的成功结果"azure 站点创建--git"命令) 和简单的 Express 应用程序启动并运行。
在第一期专栏中 ([msdn.microsoft.com/magazine/mt185576](https://msdn.microsoft.com/magazine/mt185576)),如我提到的 npm,Node 包管理器。这是所有的 Node 应用程序的库和依赖关系管理器。它相当于 NuGet 在 Microsoft.NET Framework 环境中所扮演的角色。实际上,这两了灵感就来源于 Ruby gem,以便它们共享许多相同的特征。
事实证明,为其所有的信息,npm 取决于包含所有依赖项的 JSON 文件 — — 生产和仅用于开发包 — 在单个文件调用 package.json 上。因此逻辑的第一步是创建该文件与 Express 作为一个依赖项中所示 图 1。
图 1 创建一个文件作为一个依赖项速成版
~~~
{
"name": "MSDN-MEAN",
"version": "0.0.1",
"description": "Testing out building a MEAN app from scratch",
"main": "app.js",
"scripts": {},
"author": "Ted Neward",
"license": "ISC",
"dependencies": {
"express": "^4.9.8",
"lodash": "^2.4.1",
"serve-static": "^1.7.0"
},
"devDependencies": {
}
}
~~~
此文件的内容通常都很容易理解,但有几点值得说明一下。首先,您通常会 (尽管有一些工具可为你管理) 来对此文件手动维护。这就是为了与 Node.js world"文本编辑器和命令行"理念保持一致。因此,准节点开发人员应熟悉编辑手工,而不考虑任何工具的可用性。其次,有两个集的依赖关系。依赖关系是 npm 应在生产类型环境中安装的程序包。DevDependencies 是仅由开发人员使用的程序包。
现在,思考一下这个最简单方法是在应用程序 (通过 Git) 推送到 Azure 时将安装依赖项。当 devDependencies 安装 (以及依赖关系的内容) 中所示在开发人员便携式计算机上安装包 图 2
![](https://box.kancloud.cn/2016-01-08_568f4ae851a88.png)
图 2 安装您的依赖关系
说到这里,您应该现在开始吧。与只是当前目录中的 package.json 文件,输入"npm 安装"命令行和监视 npm 请求在沿 express,但 lodash (函数和方法,包括使用某些功能的工具如地图和筛选器,以及对数组和对象的扩展的一个方便的库),向下和 serve 静态 (稍后我将讨论更高版本) 到您的本地计算机上。
NuGet,如不只是该程序包,但所有依赖项,也会安装 npm。这是什么导致终端中的树中显示。对于大伞合并大量的热门程序包的程序包,此显示可以获得相当长。Npm 还工具我在我 package.json 中省去了两个条目的说明: 此包的来自该存储库字段和自述文件数据。这些主要用于 npm 包安装到中央 npm 库。我找不到他们尤其适合于在应用程序中,但肯定您的喜好而定警告小于 npm 活动让它们不会带来危害。
随着这一系列的不断,我将添加到 package.json,因此您应定期运行"npm install"的其他包以获取新的包。事实上,请注意,在速成版安装输出目录树调试包 (其中我使用在上一期的),则一个依赖项,但我没有将它放到 package.json 文件直接。它已被我 package.json 文件应逐一显式列出所有依赖项直接 (而不是所使用的库,但永远不会直接调用),我使用我习惯、 让继续并将其添加到 package.json 并执行另一个"npm 安装":
~~~
"dependencies": {
"debug": "^2.2.0",
"express": "^4.9.8",
"lodash": "^2.4.1",
"serve-static": "^1.7.0"
},
~~~
这种方式在种情况下我知道哪个版本的调试我实际使用而非 Express 使用何种版本),这种差异变得重要。顺便说一下,(既然您知道的文件格式如下所示) 安装库的传统方法是使用"npm 安装 -另存使用。" 使用"-将保存"参数将导致 npm 修改 package.json 文件 (而不是只需将其安装没有记录的情况下)。
事实上,如果这样做"npm 安装保存、 express-"npm 将更新的 express 条目为最新版本 (即,在撰写本文时,4.13.3),即使它已存在。没有但第三种方法中,使用另一个包称作 yeoman 搭建出的 Express 应用程序中,但这里的目标的一部分是我要将此留给更高版本以便了解平均值、 中的所有移动部分。
## 大家好,Express
一旦安装 Express bits,很简单,只需编写无处不在 Express 中的"hello world"。(因为这是与它为"main"的条目具有何种 package.json) 调用 app.js 文件中,在代码 图 3 简单但有必要敬意向计算机科学领域神灵。
图 3 Hello World 速成版的代码
~~~
// Load modules
var express = require('express');
var debug = require('debug')('app');
// Create express instance
var app = express();
// Set up a simple route
app.get('/', function (req, res) {
debug("/ requested");
res.send('Hello World!');
});
// Start the server
var port = process.env.PORT || 3000;
debug("We picked up",port,"for the port");
var server = app.listen(port, function () {
var host = server.address().address;
var port = server.address().port;
console.log('Example app listening at http://%s:%s', host, port);
});
~~~
前两行是您在上一期,这是目前 Node.js 如何加载模块中看到的需要调用。这将更改 ECMAScript 6 中后,已批准并发货。这些为您提供访问 express 并调试包,分别。Express 模块通过提取需要是实际的函数,在调用时,会产生速成版应用程序本身 — 因此,它将进入应用程序 (按约定)。
下一行是 Express 所调用的路由。这后期是在许多方面与在 ASP.NET 和 ASP.NET MVC 中更常见的路由表类似。这将映射请求谓词 (get) 的相对 URL 路径 ("/"在此情况下) 的函数。在这种情况下,它是一个匿名函数文字响应与"Hello World"。 请注意该函数也使用 debug 对象来收到请求后 spew 出快速的行。
最后,代码将检查当前环境以查看是否有一个端口的环境变量指定 (这将是在 Azure 中)。如果没有,它分配到端口 3000。然后应用程序对象被告知要听到声音,这是阻止调用。它将执行时它开始侦听传入的匿名函数文字。然后该过程将只是等待传入的请求。假定该请求是为"/,"回复与"Hello World"。
## 调试、 Express 和您
如前一部分中所述,调试输出不会显示除非调试环境变量设置为在需要步骤中使用相同的字符串。在这种情况下,这是应用程序。Express 还使用调试和如果调试设置为"*,"则所有速成版的诊断输出还将显示。很可能有点太让人望而却步用于调试定期进行,但它可以是很有帮助才能看到它在早期阶段使用速成版的滚动。这将有助于为您提供某种意义上的各个部分,而且什么正在时调用。没有举例说明如何 (使用了几个请求) 中所示其输出 图 4。
![](https://box.kancloud.cn/2016-01-08_568f4ae87ab67.png)
图 4 Express with 调试日志记录
若要关闭调试功能,只需设置为 nothing 的调试。若要查看多个调试流,而不是所有这些只是逗号单独名称:
~~~
DEBUG=app,express:router,express:router:layer
~~~
该命令将只显示来自这些三个调试流的输出。
## 总结
在许多方面,速成版很像 ASP.NET。这是 true 不仅在它如何处理 HTTP 通信,但它作为一种"中央中心"围绕其数十个 (如果不数百) 的其他程序包依赖于和扩展。"Serve static"包中,例如,为的 Express 应用程序提供预建的方法来提供静态的 (即,"不执行在服务器端") 的资产如图像和字体的目录。在下一部分中,我将首先着眼于如何使用 Express 请求和响应对象。(如果您等不及,签出的速成版文档[expressjs.com](http://expressjs.com/)。) 同时...祝您编码愉快 !
* * *
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) 与他联系。*
- 介绍
- Microsoft Azure - Microsoft Azure - 大图
- 崛起 - 新手成功的秘诀
- ASP.NET - 借助 OmniSharp 和 Yeoman 随时随地使用 ASP.NET 5
- 使用 C++ 进行 Windows 开发 - Visual C++ 2015 中的协同例程
- Visual Studio - Bower: 用于 Web 开发的新型工具
- 测试运行 - 使用 C# 实现线性判别分析
- 代码分析 - 借助与 NuGet 集成的 Roslyn 代码分析来生成和部署库
- 孜孜不倦的程序员 - 如何成为 MEAN: 快速安装
- Microsoft Band - 借助 Microsoft Band SDK 开发 Windows 10 应用程序
- C# - C# 中的一种分裂与合并表达式分析器
- 别让我打开话匣子 - 过时的东西
- 编者寄语 - 灾难链