本文详解Node.js创建Web服务器的核心步骤,通过Hello World经典示例展示如何引入HTTP模块、创建服务器实例及监听端口。涵盖命令行运行、浏览器访问及Buffer编码处理等基础操作,帮助开发者快速掌握Node.js服务端开发入门技巧。
Node.js服务器环境概述
Node.js的核心应用场景主要在于构建服务器端程序。
Node.js的设计初衷之一,是提供一种具备高度可扩展性的服务器运行环境。这与前文提到的Node与V8引擎的区别紧密相关:Node不仅利用V8引擎解析JavaScript代码,还内置了经过高度优化的应用库以提升服务器性能。例如,HTTP模块便是专门针对快速、非阻塞式HTTP服务器需求,使用C语言重新编写的。接下来,我们将通过Node处理HTTP服务器的经典“Hello World”示例进行具体说明。
Hello World服务器实现
具体代码实现如下:
var http=require('http');//引入核心HTTP模块
/*创建服务器*/
var server=http.createServer(function(req,res){
res.writeHead(200,{"Content-type":'text/html'});
res.end('hello world');
});
/*监听IP以及端口*/
server.listen(8124,'127.0.0.1',function(){
console.log('服务器创建成成功:127.0.0.1:8124');
});
执行上述代码后的运行结果如下所示:
ZXD@ZXD-PC /K/work/learn/nodejs/cvs01
$ node app
服务器创建成成功:127.0.0.1:8124

该示例代码首先利用require方法将HTTP库引入程序中。尽管许多编程语言都具备引入外部库的机制,但Node.js采用的是CommonJS模块规范。
当前阶段需要理解的关键点是,HTTP库所具备的功能已被赋值给http对象。
接下来,我们需要构建一个HTTP服务器。与PHP等需要依托Apache等外部服务器运行的语言不同,Node.js自身即可充当Web服务器。
然而,这也意味着我们需要手动创建该服务器实例。代码的下一行调用了HTTP模块提供的工厂方法createServer来生成一个新的HTTP服务器。值得注意的是,新创建的HTTP服务器并未被赋值给任何变量,而是作为一个存活于全局范围内的匿名对象存在。
我们可以通过链式调用来初始化服务器,并指定其监听8124端口。在调用createServer时,我们传递了一个匿名函数作为参数。该函数被绑定到新创建服务器的事件监听器上,用于处理request事件。消息事件机制是JavaScript和Node.js的核心所在。在此示例中,每当有新的访问请求抵达Web服务器,系统便会调用我们指定的函数来处理请求。我们将这类方法称为回调(callback)。其原理是,每当特定事件发生时,系统会触发并执行监听该事件的所有回调函数。
多场景开发示例
示例二:
由于前往另一座城市出差,手头没有电脑,导致dom framework无法按计划发布。借此机会学习一些新技术。此时最迫切的需求是寻找一个超轻量的后端来支撑我的框架,因此我将目光投向了传说中的服务端JavaScript。在后端JS领域,最著名的无疑是Ryan Dahl开发的node.js,另一个则是aptana IDE提供商推出的jaxer。
首先下载node.js,然后将其解压至E盘,并将文件夹重命名为node。接着在开始菜单中输入cmd,使用cd命令切换到nodejs的解压目录:

第一个例子:hello world。
在node目录下创建hello.js文件,并在其中输入以下代码:
var sys = require("sys");
sys.puts("Hello world");
随后在命令行中输入命令node hello.js,即可在命令行中看到输出结果Hello world。
第二个例子:hello world2。
这次我们尝试从浏览器中输出hello world。在node目录下创建http.js,并输入以下代码:
var sys = require("sys"),
http = require("http");
http.createServer(function(request, response) {
response.sendHeader(200, {"Content-Type": "text/html"});
response.write("Hello World!");
response.close();
}).listen(8080);
sys.puts("Server running at http://localhost:8080/");
随后在命令行中输入命令node http.js,并在浏览器地址栏输入http://localhost:8080/进行访问。


第三个例子:hello world2。
字符串编码处理
node.js提供了一个Buffer类,用于转换不同编码的字符串。
目前该功能支持三种类型:'ascii','utf8'与'binary'。详细信息可参考官方文档。
var Buffer = require('buffer').Buffer,
buf = new Buffer(256),
len = buf.write('\u00bd + \u00bc = \u00be', 0);
console.log(len + " bytes: " + buf.toString('utf8', 0, len));
第四个例子:hello world3。
//synopsis.js
//synopsis 摘要, 梗概,大纲
var http = require('http');
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Hello World\n');
}).listen(8124);
console.log('Server running at http://127.0.0.1:8124/');