一.开始使用Node.js编程
1.hello world
好了,让我们开始实现第一个 Node.js 程序吧。打开你常用的文本编辑器,在其中输入:
console.log('Hello World');
将文件保存为 helloworld.js,打开终端,进入 helloworld.js 所在的目录,执行以下命令:
node helloworld.js
如果一切正常,你将会在终端中看到输出 Hello World。console 是 Node.js 提供的控制台对象,其中包含了向标准输出写
入的操作,如 console.log、console.error 等。console.log 是我们最常用的输出 指令,它和 C 语言中的 printf 的功能类似,也可以接受任意多个参数,支持 %d、%s 变 量引用,例如:
//consolelog.js console.log('%s: %d', 'Hello', 25)
2.Node.js命令行工具
输入 node --help 可以看到详细的帮助信息。
其中显示了 node 的用法,运行 Node.js 程序的基本方法就是执行 node script.js, 其中 script.js是脚本的文件名。
除了直接运行脚本文件外,node --help 显示的使用方法中说明了另一种输出 Hello World 的方式:
$ node -e "console.log('Hello World');" Hello World
我们可以把要执行的语句作为 node -e 的参数直接执行。
REPL (Read-eval-print loop),即输入—求值—输出循环。如果你用过 Python,就会知 道在终端下运行无参数的 python 命令或者使用 Python IDLE 打开的 shell,可以进入一个即 时求值的运行环境。Node.js 也有这样的功能,运行无参数的 node 将会启动一个 JavaScript 的交互式 shell。
如果你执行了一个函数,那么 REPL 还会在下面显示这个函数的返回 值,上面例子中的 undefined 就是 console.log 的返回值。如果你输入了一个错误的 指令,REPL 则会立即显示错误并输出调用栈。在任何时候,连续按两次 Ctrl + C 即可推出 Node.js 的 REPL 模式。
3.建立Http服务器
Node.js 是为网络而诞生的平台,但又与 ASP、PHP 有很大的不同,究竟不同在哪里呢? 如果你有 PHP 开发经验,会知道在成功运行 PHP 之前先要配置一个功能强大而复杂的 HTTP 服务器,譬如 Apache、IIS 或 Nginx,还需要将 PHP 配置为HTTP 服务器的模块,或者使用 FastCGI 协议调用 PHP 解释器。这种架构是“浏览器 HTTP 服务器 PHP 解释器”的组织 方式,而Node.js采用了一种不同的组织方式,如图3-1 所示。
我们看到,Node.js 将“HTTP服务器”这一层抽离,直接面向浏览器用户。这种架构 从某种意义上来说是颠覆性的,因而会让人心存疑虑:Node.js作为HTTP服务器的效率 足够吗?会不会提高耦合程度?我们不打算在这里讨论这种架构的利弊,后面章节会继续 说明。
让我们创建一个 HTTP 服务器吧。建立一个名为 app.js 的文件,内容 为:
var http = require('http'); http.createServer(function(req,res){ res.writeHead(200,{"Content-Type":"text/html"}); res.write("<h1>Node.js</h1>"); res.end("<h1>Hello,world</h1>"); }).listen(3000); console.log("Http Server is listening at port 3000");
接下来运行 node app.js命令,打开浏览器访问 http://127.0.0.1:3000
如果你有 PHP 开发经验,会习惯在修改 PHP 脚本后直接刷新浏览器以观察结果,而你 在开发 Node.js 实现的 HTTP 应用时会发现,无论你修改了代码的哪一部份,都必须终止 Node.js 再重新运行才会奏效。这是因为 Node.js 只有在第一次引用到某部份时才会去解析脚 本文件,以后都会直接访问内存,避免重复载入,而 PHP 则总是重新读取并解析脚本(如 果没有专门的优化配置)。Node.js的这种设计虽然有利于提高性能,却不利于开发调试,因 为我们在开发过程中总是希望修改后立即看到效果,而不是每次都要终止进程并重启。 supervisor 可以帮助你实现这个功能,它会监视你对代码的改动,并自动重启 Node.js。
使用方法很简单,首先使用 npm 安装 supervisor:
$ npm install -g supervisor
如果你使用的是 Linux 或 Mac,直接键入上面的命令很可能会有权限错误。原因是 npm 需要把 supervisor 安装到系统目录,需要管理员授权,可以使用 sudo npm install -g supervisor 命令来安装。
接下来,使用 supervisor 命令启动 app.js:
$ supervisor app.js
当代码被改动时,运行的脚本会被终止,然后重新启动。