node.js 学习<一>

准备工作
安装Node.js
安装 Node.js 是极其简单的事情。Node 能够运行在 Windows、Linux、Mac,以及 Solaris 和 BSD 等其他 POSIX 系统上。Node.js 能够在以下两个地址获得:项目官方 主页(http://nodejs.org)和 GitHub 代码库(http://github.com/joyent/node)。你可以 优先选择 Node 主页上提供的稳定发布版。包含最新特性的版本托管在 GitHub 上, 供核心开发团队使用。任何人想获得一份拷贝也能从 GitHub 上下载。虽然这些新 特性通常很炫,但它们没有稳定版本那么可靠。
让我们从安装 Node.js 开始。首先要从 Node 主页下载最新发布的版本。在 Node 主页上,找到下载的链接。本书印刷时的稳定发布版本是 0.6.131。Node 主页提供了 Windows 和 Mac 的安装程序,以及源代码包。如果你在使用 Linux,可以选择从源 代码安装,也可以使用常见的包管理程序(apt-get、yum 等)。

开始写代码
本节将介绍一些 Node 开发的基础内容,为进一步学习做准备。
Node 是服务器程序,人们常常难以理解它也有和 Perl、Python、Ruby 一样的运行 时环境。所以通常我们称 Node.js 为“服务器端的 JavaScript”,但这不能完全描述 Node.js 本身。了解 Node.js 的最佳方法是使用其提供的 REPL 模式(Read-EvaluatePrint-Loop,输入 - 求值 - 输出 - 循环),即交互式命令行解析器,它非常适合检验 和学习 Node.js。你可以在 Node 命令行解析器中试验本书提供的代码片段。此外, 因为 Node 是对 V8 的封装,所以 Node 命令行解析器也是用来轻松测试 JavaScript 的理想方法。同时,当你想运行一个 Node 程序时,可以用任何你喜爱的文本编辑 器写好并保存成文件,然后运行 node filename.js。命令行解析器是极佳的学习 和探索工具,但我们不会将其用在产品程序中。

Enki:  node
 > 3 > 2 > 1
 false
 > true == 1
  true
  > true === 1
  false
  拥有一个实时的开发环境,你就有了非常好的学习工具,但你还需要了解 Node 解 析器的一些有用的功能,才能更好地使用它。它提供了以点号(.)开头的元命令。 如 .help 会显示帮助菜单,.clear 会清除当前运行的内容,.exit 将退出 Node 解析器(见例 1-7)。其中最有用的命令是 .clear,它会清除内存中任何变量或闭 包,而不需要重启解析器。

编写首个服务器程序 命令行解析器是我们学习和试验的好工具,而 Node.js 最主要的应用是服务器程 序。设计 Node.js 的一个主要目的是提供高度可扩展的服务器环境。这是我们在 本章开篇介绍过的 Node 和 V8 引擎有所区别的地方。Node 除了用 V8 引擎来解析 JavaScript 外,还提供了高度优化的应用库,用来提高服务器效率。比如说,HTTP 模块是专为快速非阻塞式 HTTP 服务器而用 C 重新编写的。让我们看一下 Node 采 用 HTTP 服务器的“Hello World”经典例子。

var http = require(‘http’);
http.createServer(function (req, res) {
res.writeHead(200,
{‘Content-Type’: ‘text/plain’} );
res.end(‘Hello World\n’);
}).listen(8124, “127.0.0.1”);
console.log(‘Server running at http://127.0.0.1:8124/‘);

这个示例代码首先通过 require 方法把 HTTP 库包含到程序中来。有许多语言都有 包含其他库这一方法,Node 用的是 CommonJS 模块风格。Node 模块将在第 8 章详 细介绍,当前需要了解的是,HTTP 库所具有的功能已经赋给了 http 对象。
下一步,我们需要一个 HTTP 服务器。PHP 等其他语言需要在类似 Apache 这样的 服务器中运行,而 Node 和它们不同,因为 Node 本身就是 Web 服务器。但这同样 意味着我们需要先创建该服务器。下一行代码调用 HTTP 模块的一个工厂模式方法 (createServer)来创建新的 HTTP 服务器。新创建的 HTTP 服务器并没有赋值给 任何变量,它只会成为存活在全局范围内的匿名对象。我们可以通过链式调用来初 始化服务器,并告诉它监听在 8124 端口。
当调用 createServer 的时候,我们传了一个匿名函数作为参数。此函数绑定在 新创建服务器的事件监听器上进行 request 事件处理。消息事件是 JavaScript 和 Node 的核心。在这个例子中,每当一个新的访问请求到达 Web 服务器,它都将调 用我们指定的函数方法来处理。我们称这类方法为回调(callback)。因为每当一个 事件发生时,我们将回调监听此事件的所有函数。

一个很恰当的类比是,你从书店预订一本书,等书到货时,书店会“回调”通知你 去取。
例子中的回调函数有两个参数,一个是请求的对象(req),一个是响应的对象 (res)。在回调函数中,我们调用了 res 对象的几个方法,这将修改响应结果。例 1-9 没有使用 req 对象,但你通常会需要同时使用请求和响应对象。
首先我们必须调用 res.writeHead 方法来设置 HTTP 响应头,否则就不能返回真 实内容给客户端。我们设置状态代码为 200(表示 HTTP 状态代码“200 OK”),并 且传入一段 HTTP 头描述。在本例中,我们只指定了 Content-type。
在完成了 HTTP 头后,我们可以写入 HTTP 正文。在本例中,我们用一个方法来同 时完成写入正文及关闭连接。end 方法将会关闭 HTTP 连接。但因为我们同时还传 入了一个字符串,end 方法将在把此内容发送给客户端后才关闭连接。

只需要六行代码就吧helloworld跑起来了

高性能Web服务器 当我们在 10 多年前第一次开始编写 Web 应用的时候,Web 还非常小。当然,期间 我们经历了 .com 泡沫。但那时从事互联网行业的人数还是相当少,创建的网站也没 现在这么火热。时至今日,有了先进的 Web 2.0 和随时随地可以上网的手机,这对 我们这些开发人员提出了更多的要求。我们不但要提供更复杂、更多交互、更接近 生活的功能,而且有越来越多的用户通过各种设备频繁使用这些功能,这是一个极 大的挑战。硬件在持续改进,同时我们也需要提高软件开发水平来支持这些需求。 如果只是单纯地采购更多的硬件来支撑新功能和新用户,就不那么划算了。
Node 给 Web 服务器程序开发领域引进了事件驱动编程,来尝试解决这一问题。实 践证明,虽然 Node 不是第一个尝试此方法的平台,但它是目前为止最为成功的平 台,而且我们认为它使用起来也是最容易的。后续章节会详细分析事件驱动编程, 在这里我们先对其进行简短的介绍。想象一下,你现在需要连接到一台 Web 服务器 上获取一个网页,这在正常的 DSL 连接速度下通常需要花费 100 毫秒左右。如果连 接的是一台普通的 Web 服务器,它会在服务器上为你的请求创建一个新的程序运行 实例。该程序自顶向下运行(按顺序运行所有的函数)来响应请求并生成网页返回 给你。这意味着该服务器在请求被满足前需要一直占用固定大小的内存,其中包括 了把数据返回给你所要等待的 100 多毫秒。Node 则不是采用此方式,而是在同一个 程序内服务所有的用户。每当 Node 需要等待一些费时的操作,比如等待确认你已 经收到返回的数据时(好让它标记此请求已经完成),它就继续处理下一个用户的请 求去了。我们对细节描述得还是太多了,但这些特性意味着 Node 在内存处理上比 传统服务器程序高效得多,也就是能够同时快速地服务更多的用户。这是个巨大的 成就,人们也为此而热爱 Node。

其次安装node.js 可以顺带安装npm npm可以用命令安装后续node.js需要引入的模块

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值