node.js第十课(HTTPserver)



概念:Node.js提供了http模块。当中封装了一个高效的HTTPserver和一个简单的HTTPclient。

http.server是一个基于事件的HTTP服务器。内部用C++实现。接口由JavaScript封装。

http.request则是一个HTTPclient工具。用户向server发送请求。

一、HTTPserver

http.Server实现的,它提供了一套封装级别非常低的API,不过流控制和简单的解析,全部的高层功能都须要通过它的接口

前面解说的app.js案例

代码分析:

http.createServer创建了一个http.Server的实例,将一个函数作为HTTP请求处理函数。这个函数接受两个參数,请求对象req和响应对象的res。

res显式写入了响应代码200(表示请求成功),指定响应头,写入响应体。调用end结束并发送。该实例调用listen函数,启动server并监听3000port。

1.http.Server的事件

http.Server是一个基于事件的HTTPserver,全部请求都被封装到独立的事件,开发人员仅仅要对它的事件编写对应的函数就可以实现HTTPserver的全部功能,

它继承与EventEmitter,提供了下面事件:

request:当client请求到来时,该事件被触发,提供两个參数req和res,各自是http.ServerRequest和http.ServerResponse的实例,表示请求和响应信息。

connection:当TCP连接建立时,该事件被触发,提供一个參数socket,为net.Socket的实例(底层协议对象)。

close:当server关闭时,该事件被触发。

除此之外还有checkContinue、upgrade、clientError事件。

最经常使用和关心的是:request事件,http提供了一个捷径,http.createServer([requestListener])

显式实现方法:

案例:server.js

var http = require(‘http‘);

var server = new http.Server();

server.on(‘request‘,function(req,res){

res.writeHead(200,{‘Content-Type‘:‘text/html‘});

res.write(‘<h1>NODE.JS</h1>‘);

res.end(‘<p>hello,world</p>‘);

});

server.listen(3000);

2.http.ServerRequest请求的信息

此对象是后端开发人员最关注的内容,它一般由http.Server的request对象发送,作为第一个參数传递,通常简写成request或req。

HTTP请求分为两部分:请求头和请求体。,请求内容短的直接在请求头解析完毕后马上读取,而请求体可能相对较长,须要一定的时间传输,因此提供了3个事件用于控制请求体传输。

(1)data:当请求体数据到来时,该事件被触发,该事件一共一个參数chunk,表示接受到的数据。

(2)end:当请求体传输数据完毕时,该事件被触发,此后将不会再有数据到来。

(3)close:用户当前请求结束时,该事件被触发,不同于end,假设用户强制终止了传输,也会触发close

ServerReuqest的属性

complete:client请求是否已经发送完毕

httpVersion   HTTP协议版本号,一般是1.0或1.1

method        HTTP请求方法,如:GET,POST

url           原始的请求路径,比如/pc/getUser或/user?name=marico

headers       HTTP请求头

trailers      HTTP请求尾(不常见)

connection    当前HTTP连接套接字,为net.Socket的实例

socket        connection属性的别名

client        client属性的别名

3.获取GET请求内容

因为GET请求直接被嵌入在路径中,URL完整的请求路径,包含了?后面的部分,因此你能够手动解析后面的内容作为GET的參数,Nodejs的url模块中的parse函数提供了这个功能

实例:get.js

var http=require(‘http‘);

var urls=require(‘url‘);

var util=require(‘util‘);

http.createServer(function(req,res){

res.writeHead(200,{‘Content-Type‘:‘text/plain‘});

res.end(util.inspect(urls.parse(req.url,true)));

}).listen(3000);

4.获取POST请求内容

POST请求的内容所有都在请求体中,http.ServerRequest并没有一个属性内容为请求体,原因是等待请求体传输可能是一件耗时的工作。譬如上传文件。

恶意的POST请求会大大消耗server的资源。所以Nodejs是不会解析请求体,当你须要的时候,须要手动来做。

实例:post.js

var http=require(‘http‘);

var querystring=require(‘querystring‘);

var util=require(‘util‘);

http.createServer(function(req,res){

var post=‘‘;

//注冊data事件监听函数,每当接受请求体的数据

req.on(‘data‘,function(chunk){

post+=chunk;

});

req.on(‘end‘,function(){

//解析成字符串格式的post为真正的post请求格式

post=querystring.parse(post);

//向前端返回

res.end(util.inspect(post));

});

}).listen(3000);

5.http.ServerResponse返回给client的信息

决定了用户终于能到的结果,它是由http.Server的reponse对象发送的,作为第二个參数传递。一般为response或res

基本的三个函数:

response.writeHead(statusCode,[headers]):向请求的client发送响应头。

statusCode是HTTP的状态码,如200为成功,404未找到等。

headers是一个类似关联数组的对象,表示响应头的每一个属性。

response.write(data,[encoding]) 向请求client发送对应内容,data是buffer或字符串,encoding为编码

response.end([data],[encoding]) 结束响应,告知用户全部发送已经完毕,当全部要返回的内容发送完毕,该函数必须被调用一次,假设不调用,client永远处于等待状态

时间: 2024-11-10 07:07:29

node.js第十课(HTTPserver)的相关文章

node.js第11课(HTTPclient)

 一.http模块提供了两个函数http.request和http.get,功能是作为client向HTTPserver发起请求. Ext.Ajax.request({},function(response)) 1.http.request(options,callback)发起HTTP请求,接受两个參数,option是一个类似关联数组的对象, 表示请求的參数,callback是请求的回调函数,option经常使用的參数例如以下 host:请求站点的域名或IP地址 port:请求站点的端口,

node.js之十大Web框架

之前接触过Node.js是因为好奇大前端越来越能干了,连我后台的饭碗都要抢了,太嚣张了,于是我想打压打压它,然后就这样接触它了.再到后来是因为Settings-Sync插件二次开发,我需要用node.js造一个mock server,而当时在开源项目上找到一个模拟github rest api的node.js服务端程序,然后我就在此基础上开发.从工作中学习有应用场景有目的性,果然还是学的要快很多. 今天之所以要说一说node.js的十大Web框架,主要是觉得以后针对VsCode开发或者是我自己的

node.js的安装以及http-server

node 的安装及http-server开启本地服务器 node 安装 1.下载安装包 下载地址:https://nodejs.org/en/ 选择操作系统对应的包: 2.安装 傻瓜式下一步,直到安装成功 3.查看版本号 安装成功后安装过程中已自动配置了环境变量和安装好了npm包,此时可以执行 node -v 和 npm -v 分别查看node和npm的版本号: http-server开启本地服务器 打开终端: 1.下载http server: npm install http-server -

OSChina 开源周刊第三十三期 —— Node.js 和 io.js 准备合作!

每周技术抢先看,总有你想要的! 开源资讯 Node.js 和 io.js 准备合作!合久必分,分久必合? Nervana 开源深度学习软件,性能超 Facebook.Nvidia产品 B 站建开源工作组 多 APP 使用其开源项目 Android 新开发技术 Sky:Dart 开发 Android 应用 谷歌红帽及 VMware 宣布支持 CoreOS 容器 Oracle 宣布 Java 7 生命周期终结 Java 9 公布发行计划,明年 9 月发布正式版 IO.js 2.0.0 发布,服务器

为什么 Node.js 这么火,而同样异步模式 Python 框架 Twisted 却十几年一直不温不火?

twisted是一个强大的异步网络框架,应用的面也非常广,但是没有这几年才出现的Node.js火,社区.文档也是很少可怜我觉得二者其实在本质上差不多,而且python使用起来还是比较容易一些的 匿名用户 因为,它给了一大部分程序猿幻觉比如前后端统一,脚本也能性能很屌,做Demo搜搜快什么的,但实际上,这仅仅是幻觉罢了…… 正是因为这样的幻觉是“看得到”的,又有一个响当当的干爹Google,因此Node的曝光率远高于后端常规语言就不足为奇了. 论速度,你一个带JIT的跟常规脚本语言的虚拟机比,没到

用http-server 创建node.js 静态服务器

今天做一本书上的例子,结果代码不能正常运行,查询了一下,是语法过时了,书其实是新买的,出版不久. 过时代码如下 var connect=require('connect'); connect.createServer( connect.static("../angularjs") ).listen(5000); 错误提示:connect.static不是一个方法 由于我的目的是练习angularjs,不是学习nodejs,所以不去深究,只要能建立一个简单的服务器就行 在网上搜到的方法是

node.js 安装使用http-server

node.js npm全局安装了http-server后我该怎么使用它?我在它的安装目录下创建了inde.html,浏览器localhost:8080可以访问,那我的项目需要放在它的安装目录下?还是需要在我的项目下配置什么或者使用什么指令启动它?我在我项目目录下打开cmd运行http-server提示错误,麻烦会的朋友告知我该怎么使用http-server. 1.首先确保是全局安装 npm install http-server -g 2.例如我的某个目录结构 3.进入目录敲命令 4.浏览器访问

node.js中http-server的使用

http-server的特点: http-server is a simple, zero-configuration command-line http server. It is powerful enough for production usage, but it's simple and hackable enough to be used for testing, local development, and learning. 也正是这样,vue和node.js开发过程中都是内置了

web2.0课上的node.js

X signin作业上一周web作业为用node.js设计一个本地网站用于用户注册提交,并且有校验功能和去重检查.头疼了几天后可算弄出来了.首先,听从老师的建议看api,网址为:?https://nodejs.org/api/,看了后发现自己一头雾水,干脆还是边做边想吧,首先根据这个网址(http://www.sitepoint.com/creating-a-http-server-in-node-js/)上那个经典的写到烂的样例创建一个服务器,接下来打开浏览器浏览localhost:8000(