《Node学习指南》一第1章 Node.js:启动与运行1.1 搭建Node开发环境

简介:

本节书摘来自异步社区《Node学习指南》一书中的第1章,第1.1节,作者【美】Shelley Powers,更多章节内容可以访问云栖社区“异步社区”公众号查看

第1章 Node.js:启动与运行

Node学习指南
Node.js是以Google V8 JavaScript引擎为基础的服务器端技术。它具有很好的可扩展性,并使用了异步事件驱动IO,而没有使用线程或者独立进程。它能很好地满足那些需要频繁访问但是计算简单的网络应用的需求。

使用传统的Web服务器时,比如Apache,每次接收到用户对网络资源的请求时,Apache都会创建一个线程或者调用新的进程来处理。尽管Apache对请求的响应速度非常快,并在请求处理完毕后清理现场,但这种实现仍然占用了很多资源。访问频繁的网络应用会因此产生严重的性能问题。

相较而言,Node不会为每个请求创建新的进程或者线程。相反,它对特定事件进行监听,当事件发生时按需做出响应。在等待事件的过程中Node并不阻止任何请求,并且事件循环是按照先到先得的简单方式进行处理。

与编写客户端应用程序所使用的语言一样,Node应用程序也是用JaveScript编写的(或者其他可以编译成JaveScript的语言)。不过与前者不同的是,做Node应用程序开发前,首先需要搭建开发环境。

Node支持Unix/Linux、MaxOS以及Windows等多种操作系统。本章会告诉你在安装Node之前需要完成的准备工作,并带领你学习如何在Windows7和Linux(Ubuntu)系统上搭建Node开发环境。Mac系统的安装过程与Linux类似。

当搭建好开发环境后,我们会通过一个简单的Node示例应用,来说明Node中最重要的事件循环机制。

1.1 搭建Node开发环境

Node学习指南
安装Node有多种方法。选择什么样的方法取决于你当前使用的开发环境,以及你希望如何使用源代码或者计划如何在你现有的应用程序中使用Node。

Windows和Mac OS都有相应的安装包,但是你也可以复制Node源代码并自行编译安装。在Windows、Linux和Mac OS环境中,你也可以使用Git的clone命令来复制Node的repo(repository,代码库)。

本节演示如何在Linux系统中(Ubuntu 10.04 VPS,或者虚拟服务器)通过编译源码搭建Node环境,同时也会演示如何在Windosw7系统上安装Node,以便配合Microsoft WebMatrix使用。

提示:
可以从这个地址下载Node源代码及安装包:http://nodejs.org/#download。Wiki关于多种环境中安装Node的说明:https://github.com/joyent/node/iki/Installing-Node-via-package-manager。鉴于Node不时会有版本更新,建议读者自己搜索最新的关于特定环境下安装Node的教程。

1.1.1 Linux(Ubuntu)下安装Node

在Linux下安装Node之前,你需要先做一些准备工作。按照Wiki Node词条中提到的步骤首先要确认是否安装Python,如果计划使用SSL/TLS(Secure Sockets Layer,安全套接层/Transport Layer Security,传输层安全)还需要安装libssl-dev。某些Linux系统中默认安装了Python。如果没有,则可以使用系统包安装工具安装Python的稳定版本,如2.6或者2.7(Node最新版本所要求的Python版本号)。

提示:
本书假定你有JavaScript和传统Web开发的经验。如果这样的话,我可能是过于谨慎了,并且在描述如何安装Node的前期准备上太啰唆了。
对Ubuntu和Debian来说还需要安装其他的库。大部分Debian GNU/Linux系统中都支持APT(Advanced Packaging Tool)工具,你可以用以下apt命令来确认是否已安装了需要的库:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential openssl libssl-dev pkg-config

update命令用于确认系统上的包都更新了,upgrade命令用于升级过期的包。第三条命令用于安装需要的包。任何包依赖都由包管理工具管理。

当准备好环境后,下载Node tarball(源代码的压缩文件)。本书使用wget,你也可以使用curl。在编写本书的时候Node的最新版本是0.8.2:

wget http://nodejs.org/dist/v0.8.2/node-v0.8.2.tar.gz

下载完成后,解压:

tar -zxf node-v.tar.gz

得到目录node-v。进入该目录,使用以下命令编译安装Node:

./configure
make
sudo make install

考虑到某些读者之前没在Unix中使用过make命令,同此,对这三条命令简单说明一下:第一条命令首先进行依赖检查,然后根据你的系统环境和安装情况建立makefile,然后执行make命令编译最后一条命令执行安装操作。在这些命令执行后,Node即安装完毕并可以通过命令行全局访问。

提示:
编程的挑战在于没有两个系统是一样的。在大部分Linux环境下这一系列安装步骤应该是能工作且可以成功的。但是,关键词是“应该”。
是否注意到最后一条命令的sudo?这是为了以root权限在Linux中安装Node。不过,你还可以用以下命令在指定的下级目录中安装Node:

mkdir ~/working
./configure --prefix=~/working
make
make install
echo 'export PATH=~/working/bin:${PATH}' >> ~/.bashrc 
. ~/.bashrc

可以看到,通过设置prefix配置选项,你可以将Node安装到本地指定路径的目录中。另外别忘记你可能还需要相应地为PATH环境变量做些更新。

提示:
如果使用sudo,你需要root或者超级用户的权限。此时你的用户名必须存在于/ect/sudoers文件的列表中。
尽管可以将Node安装到本地路径,但是如果考虑到我们所有的安装步骤都是在一个共享的主机环境下进行的,是否能采用这种安装方式还需三思。因为安装Node只是第一步,接下来你还需要权限来编译Node应用程序,需要权限来让程序运行在特定端口(比如80)。事实上绝大多数共享主机环境并不会允许我们在本地路径下随意安装特定版本的Node。

除非有特殊原因,依然推荐使用sudo安装Node。

提示:
在本书第4章我们会提到,使用root权限运行Node 包管理工具(npm)曾经存在的一个安全顾虑。但是,目前这些安全问题已经解决。

1.1.2 Windows 7平台下Node+WebMatrix

你可以按照之前wiki页面中的安装步骤完成Windows系统下Node的安装。但一般来说,Node只是作为Windows Web开发架构的一部分。

目前有两种Windows Web开发架构适合使用Node。一种叫做Windows Azure云平台,允许开发人员将程序托管在远端服务器(称为云)上。Microsoft提供了关于如何在Windows Azure SDK中安装Node的说明,所以本章不涉及这一过程(不过稍后会对该SDK进行说明)。

提示:
Windows Azure SDK for Node安装说明:https://www.windowsazure.com/en-us/develop/nodejs/
另一种在Windows系统(本处指Windows 7)使用Node的方式是将Node与Microsoft WebMatrix集成。WebMatrix是网络开发人员用于集成开源技术的一种工具。以下是在Windows 7 WebMatrix中集成并运行Node的步骤:

1.安装WebMatrix;

2.使用最新的Windows安装包安装Node;

3.安装iisnode for IIS Express 7.x,以便让Windows上的IIS支持Node应用程序;

4.为WebMatrix安装Node模板,使用模板可以简化Node开发。

如图1-1所示,使用Microsoft Web Platform Installer安装WebMatrix,同时会安装IIS Express。IIS Express是Microsoft Web服务器的开发版本。

WebMatrix的下载地址:http://www.microsoft.com/Web/Webmatrix/


6c0dd0b17fa6273e3d0703b2003bf341b413b955

WebMatrix安装完成后,可以使用Node官网(http://nodejs.org/#download)提供的安装包安装最新版本的Node。过程很简单,一键安装完成后打开命令行窗口输入node检查是否能正常运行,如图1-2所示。


0d2c3ac98f708beac405ac1af499b6498dfc1043

为了能让Node与Windows下的IIS一起工作,我们需要安装iisnode。iisnode是一个本地IIS7.x模块,由Tomasz Janczuk创建并维护。它在Git Hub站点中的链接地址为:https://github.com/tjanczuk/iisnode

iisnode有x86和x64两种,但是对于x64系统,两个都需要安装。

在安装iisnode的过程中,可能会碰到图1-3所示的弹出窗口,提示系统环境中未安装Microsoft Visual C++ 2010 Redistributable Package。如果你碰到了这种情况,则需要安装该组件,同时还需要保证你安装的版本与当前正在安装的iisnode的版本是兼容的:可以从x86版本(从地址http://www.microsoft.com/download/en/details.aspx?id=5555获得)或x64版本(从地址http://www.microsoft.com/download/en/details.spx?id=14632获得)中选择安装,或者两个版本都安装。在成功安装好C++ Redistributable Package后,就可以再次运行iisnode安装程序了。


15f1e5c01154731c8aded911ac9c6f510aca3cf7

如果你还想安装iisnode的附带的示例代码,则需要以管理员权限打开命令窗口,进入到iisnode的安装目录中(“Program Files__for 64- bit”或者“Program Files (x86)”)然后运行名为setupsamples.bat的批处理文件。

最后还需要为WebMatrix下载并安装Node模板,这样就完成了WebMatrix/Node的所有安装。Node模板由Steve Serson创建,可以在地址https://github.com/SteveSanderson/Node-Site-Templates-for-WebMatrix下载。

你可以通过如下步骤来测试以上工作的正确性,首先运行WebMatrix,在打开页面中选择“Site from Template”选项。然后,图1-4所示页面会打开,你可以看到两个Node模板选项:一个是“Express”(在第7章介绍),另一个是“a basic, empty site configured for Node”。选择后者,并使用“First Node Site”或者一个你喜欢的名称为新建的站点命名。


9099fdec567de406f19a78d5ec46166c71b548e3

使用WebMatrix生成的新站点如图1-5所示。点击页面左上角的Run按钮,浏览器窗口会弹出并显示包含有“Hello, world!”信息的页面。


607b639f23146d284963054c114b0b89abb03c65

如果你在使用Windows防火墙,第一次运行一个Node应用程序时,你可能会得到一个如图1-6所示的警告信息。这时,你需要点击“Private networks”选项然后按下“Allow access”按钮,以便让防火墙知道该程序是被允许在开发机器的私有网络上通信的。


772e0d207e2fe55f175624441d735e7877bcd3fd

在新生成的WebMatrix Node工程中,存在一个名为app.js的文件。这是一个Node程序文件,包含了如下代码:

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, { 'Content-Type': 'text/html' });
  res.end('Hello, world!');
}).listen(process.env.PORT || 8080);

我会在本章第二部分对这段代码的相关部分进行详细介绍。目前,我们只需要知道这段代码实现了一个简单的服务端,它只给客户端返回“Hello, world!”。而且我们可以在任何安装有Node环境的系统中运行这段代码,并且能得到同样的功能。

提示:
若需要在WebMatrix中查看iisnode的示例,则需要在WebMatrix中选择选项“Site from Folder”,然后在弹出的对话框中输入如下内容:%localappdata%iisnodewww。

1.1.3 升级Node

偶数版本号代表了Node的稳定发行版本,例如当前的0.8.x版本,而奇数版本号表示Node的开发版本(当前是0.9.x)。在你有一些Node使用经验前,我建议选择稳定发行版本。

升级Node版本并不复杂。如果你使用安装包来做升级,那么旧版本的Node将自动被新版本覆盖。如果你直接使用源代码升级,为了避免潜在的混乱或者文件冲突,你始终应该先在旧版源代码目录中执行卸载命令,然后再安装新版本。在Node源代码目录中,可以运行如下make命令执行卸载:

make uninstall

下载新的源代码,编译然后安装它。当再有版本更新时,你需要再次执行以上过程。

升级Node的挑战在于,新版本的Node是否还能兼容特定的环境、模块或者Node应用程序。大多数情况下,你不会碰到版本问题。然而,如果你碰到了,你可以使用Node版本管理器(Nvm, Node Version Manager)在多个Node版本之间切换。

你可以从GitHub上下载Nvm,地址是https://github.com/creationix/nvm。与Node一样,你必须在你的系统中编译并安装Nvm。

使用Nvm安装指定版本的Node:

nvm install v0.4.1

使用如下命令切换到指定Node版本:

nvm run v0.4.1

查看可用的Node版本信息:

nvm ls
相关文章
|
13天前
|
JavaScript 前端开发 持续交付
【专栏】Vue.js和Node.js如何结合构建现代Web应用
【4月更文挑战第27天】本文探讨了Vue.js和Node.js如何结合构建现代Web应用。Vue.js作为轻量级前端框架,以其简洁易懂、组件化开发、双向数据绑定和虚拟DOM等特点受到青睐;而Node.js是高性能后端平台,具备事件驱动、非阻塞I/O、丰富生态系统和跨平台优势。两者结合实现前后端分离,高效通信,并支持热更新、持续集成、跨平台和多端适配,为开发高性能、易维护的Web应用提供强有力的支持。
|
2天前
|
开发框架 JavaScript 中间件
中间件应用Koa.js(Node.js)
我们添加了两个中间件。第一个中间件记录请求的开始时间,并在下一个中间件执行完毕后计算并打印出请求的总时间。第二个中间件与之前的示例相同,它设置响应体为 "Hello World"
17 6
|
2天前
|
JavaScript 中间件 API
中间件应用Express.js(Node.js)
我们定义了一个名为 `logger` 的中间件函数。它接受请求对象、响应对象以及下一个中间件函数作为参数。当接收到请求时,它会打印出请求的 HTTP 方法和 URL,然后调用 `next()` 函数来将控制权传递给下一个中间件或路由处理器。我们使用 `app.use()` 方法将 `logger` 中间件添加到了应用级别的中间件堆栈中,这意味着它将对所有请求生效。
10 3
|
10天前
|
JavaScript 前端开发 开发工具
【JavaScript 技术专栏】Node.js 基础与实战
【4月更文挑战第30天】本文介绍了Node.js的基础及应用,包括事件驱动的非阻塞I/O、单线程模型和模块系统。内容涵盖Node.js的安装配置、核心模块(如http、fs、path)及实战应用,如Web服务器、文件操作和实时通信。文章还讨论了Node.js的优劣势、与其他技术的结合,并通过案例分析展示项目实施流程。总结来说,Node.js是高效后端开发工具,适合构建高并发应用,其广阔的应用前景值得开发者探索。
|
10天前
|
JavaScript API 开发者
深入了解Node.js的文件系统:Node.js文件系统API的使用与探索
【4月更文挑战第30天】本文深入探讨了Node.js的文件系统API,介绍了如何引入`fs`模块进行文件操作。内容包括异步读取和写入文件、删除文件、创建目录以及使用文件流进行高效操作。此外,还提到了文件系统的监视功能,帮助开发者全面掌握在Node.js中处理文件和目录的方法。
|
18天前
|
JSON JavaScript 前端开发
❤Nodejs 第九章(token身份认证和express-jwt的安装认识)
【4月更文挑战第9天】Node.js第九章介绍了Token身份认证,特别是JWT(JSON Web Token)作为跨域认证的解决方案。JWT由Header、Payload和Signature三部分组成,用于在客户端和服务器间安全传输用户信息。前端收到JWT后存储在localStorage或sessionStorage中,并在请求头中发送。Express-JWT是一个中间件,用于解析JWT。基本用法包括设置secret和algorithms。注意安全问题,避免混合使用不同算法以防止降级攻击。
38 0
|
1月前
|
JavaScript Windows
Win7内网安装高版本的Node方法,亲测有效node-v16.16.0
Win7内网安装高版本的Node方法,亲测有效node-v16.16.0
58 0
|
2月前
|
JavaScript Linux 数据安全/隐私保护
node内网安装npm私服以及依赖包上传发布verdaccio
node内网安装npm私服以及依赖包上传发布verdaccio
90 1
|
11天前
|
JavaScript 前端开发 Linux
Node.js安装与配置
`Node.js` 是一个基于 `Chrome V8` 引擎的 `JavaScript` 运行环境,它允许开发者使用 `JavaScript` 编写服务器端代码。以下是 `Node.js` 的安装与配置的详细步骤:
Node.js安装与配置
|
11天前
|
JSON JavaScript 关系型数据库
❤Nodejs 第十六章(Nodejs环境安装和依赖使用)
【4月更文挑战第16天】本文介绍了Node.js环境安装和项目搭建步骤。检查Node.js和npm版本安装核心依赖,如Express(Web应用框架)、MySQL库、CORS(解决跨域问题)、body-parser(解析POST数据)、express-jwt和jsonwebtoken(JWT验证)、multer(文件上传处理)、ws(WebSocket支持),以及可选的dotenv(管理环境变量)和ejs(模板引擎)。完整源码可在Gitee开源项目[nexusapi](https://gitee.com/lintaibai/nexusapi)中找到。
22 0