Nodejs学习item【入门手上】
前端之家收集整理的这篇文章主要介绍了
Nodejs学习item【入门手上】,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_4040@一、 安装
@H
4040@首先,去http://nodejs.org 下载安装。我下的版本是0.8.14。安装很简单,下一步下一步就哦了。然后在path中配置一下安装目录即可,msi会把npm(Node Package Manager)一并装上。
@H404_0@
@H_
4040@我的安装目录是C:\Program Files (x86)\nodejs。这时使用cmd命令窗口 node -v
,npm -v
命令查看下安装的版本
@H404_0@
@H_
4040@1.1、helloworld
@H404_0@在Node.js工程目录中新建一个
文件hello.js,里面敲一行
代码
<div class="jb51code">
<pre class="brush:js;">
console.log('hello,nodejs.') ;
@H_
404_0@进入命令行控制台,进入到Node.js工程目录敲node hello.js
@H_
404_0@
@H_
404_0@控制台
输出了“hello,nodejs.”
@H_
404_0@
1.2、web版的helloworld
@H_
404_0@在Node.js工程目录中新建一个http.js,
代码如下
@H_
404_0@在命令行中启动服务,敲 node http.js
@H_
404_0@
@H_
404_0@然后打开浏览器地址栏输入http://localhost:8000/,看见
页面上
输出Hello World! 就成功了。
@H_
404_0@
@H_
404_0@
node.js的版本一定和API同步
@H_
404_0@node.js的版本号有规律,偶数版本为稳定版本,奇数版本非稳定版本
@H_
404_0@2 HelloWorld
代码分析
@H_
404_0@好啦,从现在开始逐行分析我们的HelloWorld。
@H_
404_0@
引入模块
@H_
404_0@require
方法用来引入一个模块,参数是模块的名字。比如File System模块,可以这么引入:
@H_
404_0@我们可以把require()
方法当做全局
方法使用,但实际上它更像属于某个模块的本地
方法,它的文档参考这里:https://nodejs.org/api/globals.html。
@H_
404_0@require
方法返回某个模块的实例,比如require(“http”)就返回一个HTTP实例。HTTP实例的参考文档在这里:https://nodejs.org/api/http.html。
@H_
404_0@我们看到,HTTP模块有一个
方法createServer(),就牵涉到我们的第二行
代码了。
@H_
404_0@
创建服务器
@H_
404_0@HTTP模块的createServer()
方法,接受一个
方法作为参数,原型为:
@H_
404_0@requestListener是一个
方法,会与http.Server类的request事件关联起来。这样当客户端请求到达时,requestListener就会被
调用。
@H_
404_0@requestListener有两个参数,
函数原型如下:
@H_
404_0@第一个参数request的类型是
http.IncomingMessage
,实现了
Readable Stream
接口。
第二个参数的类型是
http.ServerResponse
,实现了
Writeable Stream
接口。
@H_
404_0@Stream的API在这里:https://nodejs.org/api/stream.html。同时,request和response还是EventEmitter,可以发射特定的事件。
@H_
404_0@EventEmitter的API在这里:https://nodejs.org/api/events.html#events_class_events_eventemitter,后面我们会讲如何使用EventEmitter来发射事件、处理事件。
@H_
404_0@再回顾一下我们创建server的
代码:
@H_
404_0@http.createServer返回一个http.Server实例,http.Server的listen
方法可以让服务器监听在某个端口上,示例中是8000。
@H_
404_0@如你所见,我们提供了一个匿名
函数给createServer
方法。在这个
方法中,我们通过response参数向客户端回写了“Hello World!”消息。
@H_
404_0@
分析客户端请求
@H_
404_0@前面我们分析了http.createServer
方法,它的参数是一个带两个参数的
方法,一个代表了客户端发过来的请求,一个代表了要回写给客户端的响应。我们来看看request参数。
@H_
404_0@request是
http.IncomingMessage
的实例,通过这个实例,我们可以拿到请求参数,比如HTTP
方法、HTTP版本、url、头部等,具体的API在这里:https://nodejs.org/api/http.html#http_http_incomingmessage。
@H_
404_0@我们通过
修改HelloWorld.js来看看(另存为HelloWorld2.js)。
代码如下:
// 创建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");
@H_
404_0@如你所见,我使用console这个对象来
输出了一些调试信息,打印了HTTP
方法、版本、url等信息。可以执行node HelloWorld2.js,浏览器访问http://localhost:8000,然后跑到命令行看看
输出了什么信息,我这里是这样的:
@H_
404_0@
@H_
404_0@我们简简单单的HelloWorld已经可以发送一些响应数据给客户端,你在浏览器里能看到“Hello World!”字样。这个响应是通过
http.ServerResponse
的实例
response
发送给客户端的。
@H_
404_0@
http.ServerResponse
也是一个
Stream
,还是一个EventEmitter。我们通过它给客户度返回HTTP状态码、数据、HTTP头部等信息。
@H_
404_0@
HTTP模块
在Node.js的HTTP模块,状态行就是通过http.ServerResponse的writeHead
方法写给客户端的。writeHead
方法原型如下:
@H_
404_0@这个
方法的第一个参数,就是statusCode,也就是200、
403之类的数字,剩下的参数是可选的。最后一个参数是headers,你可以在这里使用JSON对象表示法来写一些HTTP头部,比如:
{“Content-Type”:”text/plain”,”Content-Length”:11}
。第一个可选参数statusMessage用来指定一个状态描述消息,可以不填写。
@H_
404_0@
HTTP头部
@H_
404_0@头部就是一些key-value对,比如我们在HelloWorld里看到的”Content-Type”,就是用来说明数据类型的头部
标签,对应的可能是文本
文件、
图片、视频、二进制等。类似的还有”Content-Length”,用来指定数据长度。还有很多很多,比如”Date”、”Connection”等。具体还是参考前面的
链接吧。
@H_
404_0@头部还可以使用http.ServerResponse的
response.setHeader(name,value)
方法来单独设置,一次可以设置一个HTTP头部。
@H_
404_0@
数据
@H_
404_0@头部之后就是数据了,有些状态码,比如200,后续都会有一些数据。而有些,比如
301、
404、
403、500之类的,多数没有数据。
@H_
404_0@数据通过http.ServerResponse的write
方法来写回给客户端,比如这样:
@H_
404_0@这里要提一点,HTTP常见的数据传输编码方式有两种:
@H_
404_0@设置Content-Length,传输固定长度的数据设置Transfer-Encoding头部为chunked,分块传输数据
@H_
404_0@像我们现在的HelloWorld示例,没有设置Content-Length头部,Node.js的HTTP模块就默认为
chunked
编码。
@H_
404_0@我们使用Chrome浏览器的开发者工具来查看网络数据,可以很明确的看到。如下图所示:
@H_
404_0@
@H_
404_0@
HTTP响应
@H_
404_0@我标注出来的三处,都是HelloWorld示例传递给浏览器的HTTP头部信息。
@H_
404_0@我们通过http.ServerResponse的write
方法向客户端写数据。你可以一次写入所有数据,也可以把数据分开来多次写入。当要传输的数据量较大时,分多次写入就是比较合理的做法,比如你向客户端发送大
文件,就比较适合分多次写入,也可以利用Node.js的异步特性,获得不错的
性能。
原文链接:https://www.f2er.com/nodejs/48973.html