我们已经知道了 JS 模块的基本单位是单个 JS 文件,但复杂些的模块往往由多个子模块组成。为了便于管理和使用,我们可以把由多个子模块组成的大模块称做包,并把所有子模块放在同一个目录里。在组成一个包的所有子模块中,需要有一个入口模块,入口模块的导出对象被作为包的导出对象。例如有以下目录结构。- /home/user/lib/ - cat/ head.js body.
Node.js 的是建立在 Chrome 的 JavaScript 的运行时,可方便地构建快速,可扩展的网络应用程序的平台。Node.js 使用事件驱动,非阻塞 I/O 模型,轻量、高效,可以完美地处理时时数据,运行在不同的设备上。
本章将之前零散介绍的知识点串了起来,完整地演示了一个使用 NodeJS 开发程序的例子,至此我们的课程就全部结束了。以下是对新诞生的 NodeJSer 的一些建议。要熟悉官方 API 文档。并不是说要熟悉到能记住每个 API 的名称和用法,而是要熟悉 NodeJS 提供了哪些功能,一旦需要时知道查询API文档的哪块地方。要先设计再实现。
第一次迭代快速迭代是一种不错的开发方式,因此我们在第一次迭代时先实现服务器的基本功能。设计简单分析了需求之后,我们大致会得到以下的设计方案。 +---------+ +-----------+ +----------+request -->| parse |-->| combine |-->| output |-->
学习讲究的是学以致用和融会贯通。至此我们已经分别介绍了 NodeJS 的很多知识点,本章作为最后一章,将完整地介绍一个使用 NodeJS 开发 Web 服务器的示例。我们要开发的是一个简单的静态文件合并服务器,该服务器需要支持类似以下格式的 JS 或 CSS 文件合并请求。在以上 URL 中,??是一个分隔符,之前是需要合并的多个文件的 URL 的公共部分,之后是使用,分隔的差异部分。
本章介绍了 JS 异步编程相关的知识,总结起来有以下几点:不掌握异步编程就不算学会 NodeJS。异步编程依托于回调来实现,而使用回调不一定就是异步编程。异步编程下的函数间数据传递、数组遍历和异常处理与同步编程有很大差别。使用 domain 模块简化异步代码的异常处理,并小心陷阱。
官方文档: http://nodejs.org/api/domain.htmlNodeJS 提供了 domain 模块,可以简化异步代码的异常处理。在介绍该模块之前,我们需要首先理解“域”的概念。简单的讲,一个域就是一个 JS 运行环境,在一个运行环境中,如果一个异常没有被捕获,将作为一个全局异常被抛出。NodeJS 通过 process 对象提供了捕获全局异常的方法,示例代码如下process.
NodeJS 最大的卖点——事件机制和异步 IO,对开发者并不是透明的。开发者需要按异步方式编写代码才用得上这个卖点,而这一点也遭到了一些 NodeJS 反对者的抨击。但不管怎样,异步编程确实是 NodeJS 最大的特点,没有掌握异步编程就不能说是真正学会了 NodeJS。本章将介绍与异步编程相关的各种知识。在代码中,异步编程的直接体现就是回调。
本章介绍了使用 NodeJS 管理进程时需要的 API 以及主要的应用场景,总结起来有以下几点:使用 process 对象管理自身。使用 child_process 模块创建和管理子进程。
和进程管理相关的 API 单独介绍起来比较枯燥,因此这里从一些典型的应用场景出发,分别介绍一些重要 API 的使用方法。如何获取命令行参数在 NodeJS 中可以通过 process.argv 获取命令行参数。但是比较意外的是,node 执行程序路径和主模块文件路径固定占据了 argv[0]和 argv[1]两个位置,而第一个命令行参数从 argv[2]开始。
本章介绍了使用 NodeJS 操作网络时需要的 API 以及一些坑回避技巧,总结起来有以下几点:http 和 https 模块支持服务端模式和客户端模式两种使用方式。request 和 response 对象除了用于读写头数据外,都可以当作数据流来操作。url.parse 方法加上 request.url 属性是处理 HTTP 请求时的固定搭配。使用 zlib 模块可以减少使用 HTTP 协议时的数据传输量。
本章介绍了使用 NodeJS 操作文件时需要的 API 以及一些技巧,总结起来有以下几点:学好文件操作,编写各种程序都不怕。如果不是很在意性能,fs 模块的同步 API 能让生活更加美好。需要对文件读写做到字节级别的精细控制时,请使用 fs 模块的文件底层操作 API。不要使用拼接字符串的方式来处理路径,使用 path 模块。掌握好目录遍历和文件编码处理技巧,很实用。
本章介绍了使用 NodeJS 编写代码前需要做的准备工作,总结起来有以下几点:编写代码前先规划好目录结构,才能做到有条不紊。稍大些的程序可以将代码拆分为多个模块管理,更大些的程序可以使用包来组织模块。合理使用 node_modules 和 NODE_PATH 来解耦包的使用方式和物理路径。使用 NPM 加入 NodeJS 生态圈互通有无。想到了心仪的包名时请提前在 NPM 上抢注。
NPM 是随同 NodeJS 一起安装的包管理工具,能解决 NodeJS 代码部署上的很多问题,常见的使用场景有以下几种:允许用户从 NPM 服务器下载别人编写的三方包到本地使用。允许用户从 NPM 服务器下载并安装别人编写的命令行程序到本地使用。允许用户将自己编写的包或命令行程序上传到 NPM 服务器供别人使用。
本章介绍了有关 NodeJS 的基本概念和使用方法,总结起来有以下知识点:NodeJS 是一个 JS 脚本解析器,任何操作系统下安装 NodeJS 本质上做的事情都是把 NodeJS 执行程序复制到一个目录,然后保证这个目录在系统 PATH 环境变量下,以便终端下可以使用 node 命令。终端下直接输入 node 命令可进入命令交互模式,很适合用来测试一些 JS 代码片段,比如正则表达式。
编写稍大一点的程序时一般都会将代码模块化。在 NodeJS 中,一般将代码合理拆分到不同的 JS 文件中,每一个文件就是一个模块,而文件路径就是模块名。在编写每个模块时,都有 require、exports、module 三个预先定义好的变量可供使用。requirerequire 函数用于在当前模块中加载和使用别的模块,传入一个模块名,返回一个模块导出对象。模块名可使用相对路径(以.
打开终端,键入 node 进入命令交互模式,可以输入一条代码语句后立即执行并显示结果,例如:$ node> console.log('Hello World!');Hello World!如果要运行一大段代码的话,可以先写一个JS文件再运行。例如有以下 hello.js。function hello() { console.log('Hello World!');}hello();写好后在终端下键入 node hello.js 运行,结果如下:$ node hello.
安装程序NodeJS 提供了一些安装程序,都可以在 nodejs.org 这里下载并安装。Windows 系统下,选择和系统版本匹配的 .msi 后缀的安装文件。Mac OS X 系统下,选择 .pkg 后缀的安装文件。编译安装Linux 系统下没有现成的安装程序可用,虽然一些发行版可以使用 apt-get 之类的方式安装,但不一定能安装到最新版。因此 Linux 系统下一般使用以下方式编译方式安装 NodeJS。1.
尽管存在一听说可以直接运行 JS 文件就觉得很酷的同学,但大多数同学在接触新东西时首先关心的是有啥用处,以及能带来啥价值。NodeJS 的作者说,他创造 NodeJS 的目的是为了实现高性能 Web 服务器,他首先看重的是事件机制和异步 IO 模型的优越性,而不是 JS。但是他需要选择一种编程语言实现他的想法,这种编程语言不能自带 IO 功能,并且需要能良好支持事件机制。
JS是脚本语言,脚本语言都需要一个解析器才能运行。对于写在 HTML 页面里的 JS,浏览器充当了解析器的角色。而对于需要独立运行的 JS,NodeJS 就是一个解析器。每一种解析器都是一个运行环境,不但允许JS定义各种数据结构,进行各种计算,还允许 JS 使用运行环境提供的内置对象和方法做一些事情。
关注时代Java