一.建立 HTTP 服务器
前面的 Hello World 程序对于你来说可能太简单了,因为这个例子几乎可以在任何语言的教科书上找到对应的内容,既无聊又乏味,让我们来点儿不一样的东西,真正感受一下Node.js 的魅力所在吧。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(‘<p>Hello World</p>‘); }).listen(3000); console.log("HTTP server is listening at port 3000.");
接下来运行 node app.js命令,打开浏览器访问 http://127.0.0.1:3000,即可看到效果。
用 Node.js 实现的最简单的 HTTP 服务器就这样诞生了。这个程序调用了 Node.js 提供的http 模块,对所有 HTTP 请求答复同样的内容并监听 3000 端口。在终端中运行这个脚本
时,我们会发现它并不像 Hello World 一样结束后立即退出,而是一直等待,直到按下 Ctrl +C 才会结束。这是因为 listen 函数中创建了事件监听器,使得 Node.js 进程不会退出事件循环。我们会在后面的章节中详细介绍这其中的奥秘
使用技巧:
有时候我们可能想修改完内容刷新页面想看到效果,无论你修改了代码的哪一部份,都必须终止Node.js 再重新运行才会奏效。这是因为 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
当代码被改动时,运行的脚本会被终止,然后重新启动