一、 安装
首先,去http://nodejs.org 下载安装。我下的版本是0.8.14。安装很简单,下一步下一步就哦了。然后在path中配置一下安装目录即可,msi会把npm(Node Package Manager)一并装上。
我的安装目录是C:\Program Files (x86)\nodejs。这时使用cmd命令窗口 node -v
,npm -v
命令查看下安装的版本
1.1、helloworld
在Node.js工程目录中新建一个文件hello.js,里面敲一行代码
console.log('hello, nodejs.') ;
进入命令行控制台,进入到Node.js工程目录敲node hello.js
控制台输出了“hello, nodejs.”
1.2、web版的helloworld
在Node.js工程目录中新建一个http.js,代码如下
var http = require("http");
http.createServer(function(request, response) {
response.writeHead(200, {"Content-Type": "text/html"});
response.write("Hello World!");
response.end();
}).listen(8000);
在命令行中启动服务,敲 node http.js
然后打开浏览器地址栏输入http://localhost:8000/,看见页面上输出Hello World! 就成功了。
1.3 学习方式:
一、nodejs.org看看nodejs的版本升级,新特性的加入,重要bug的修复等
二、www.npmjs.com模块社区,看他人源代码,省力
三、github.com大量的项目和源码
四、stackoverflow.com技术解答社区以及查询相关资源,环境配置,异常均可找到答案
node.js的版本一定和API同步
node.js的版本号有规律,偶数版本为稳定版本,奇数版本非稳定版本
2 HelloWorld代码分析
好啦,从现在开始逐行分析我们的HelloWorld。
引入模块
var http = require("http");
require方法用来引入一个模块,参数是模块的名字。比如File System模块,可以这么引入:
var fs = require("fs");
我们可以把require()方法当做全局方法使用,但实际上它更像属于某个模块的本地方法,它的文档参考这里:https://nodejs.org/api/globals.html。
require方法返回某个模块的实例,比如require(“http”)就返回一个HTTP实例。HTTP实例的参考文档在这里:https://nodejs.org/api/http.html。
我们看到,HTTP模块有一个方法createServer(),就牵涉到我们的第二行代码了。
创建服务器
HTTP模块的createServer()方法,接受一个方法作为参数,原型为:
http.createServer([requestListener])
requestListener是一个方法,会与http.Server类的request事件关联起来。这样当客户端请求到达时,requestListener就会被调用。
requestListener有两个参数,函数原型如下:
function (request, response) { }
第一个参数request的类型是http.IncomingMessage
,实现了Readable Stream
接口。
第二个参数的类型是http.ServerResponse
,实现了Writeable Stream
接口。
Stream的API在这里:https://nodejs.org/api/stream.html。同时,request和response还是EventEmitter,可以发射特定的事件。
EventEmitter的API在这里:https://nodejs.org/api/events.html#events_class_events_eventemitter,后面我们会讲如何使用EventEmitter来发射事件、处理事件。
再回顾一下我们创建server的代码:
http.createServer(
function(request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World!");
response.end();
}
).listen(8000);
http.createServer返回一个http.Server实例,http.Server的listen方法可以让服务器监听在某个端口上,示例中是8000。
如你所见,我们提供了一个匿名函数给createServer方法。在这个方法中,我们通过response参数向客户端回写了“Hello World!”消息。
分析客户端请求
前面我们分析了http.createServer方法,它的参数是一个带两个参数的方法,一个代表了客户端发过来的请求,一个代表了要回写给客户端的响应。我们来看看request参数。
request是http.IncomingMessage
的实例,通过这个实例,我们可以拿到请求参数,比如HTTP方法、HTTP版本、url、头部等,具体的API在这里:https://nodejs.org/api/http.html#http_http_incomingmessage。
我们通过修改HelloWorld.js来看看(另存为HelloWorld2.js)。代码如下:
// 引入http模块
var http = require("http");
// 创建server,指定处理客户端请求的函数
http.createServer(
function(request, response) {
console.log("method - " + request.method);
console.log("version - " + request.httpVersion);
console.log("url - " + request.url);
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World!");
response.end();
}
).listen(8000);
console.log("Hello World start listen on port 8000");
如你所见,我使用console这个对象来输出了一些调试信息,打印了HTTP方法、版本、url等信息。可以执行node HelloWorld2.js,浏览器访问http://localhost:8000,然后跑到命令行看看输出了什么信息,我这里是这样的:
我们简简单单的HelloWorld已经可以发送一些响应数据给客户端,你在浏览器里能看到“Hello World!”字样。这个响应是通过http.ServerResponse
的实例response
发送给客户端的