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永远处于等待状态
转载于:https://www.cnblogs.com/yxwkf/p/4001042.html
node.js第十课(HTTPserver)相关推荐
- Node.js之十大Web框架
Node.js之十大Web框架 之前接触过Node.js是因为好奇大前端越来越能干了,连我后台的饭碗都要抢了,太嚣张了,于是我想打压打压它,然后就这样接触它了. 再到后来是因为Settings-Syn ...
- Node.js学习十(url 网址)
文章目录 前言 一.什么是url模块 二.网址字符串与网址对象 1.使用url.parse()解析网址字符串 2.使用WHATWG API解析网址字符串 三.把对象格式化为URL(旧版方法) 四.从组 ...
- Node.js 小白入门课3-设置基本数据库
Node.js 小白入门课3-设置基本数据库 Sequelize(框架,数据库包文件,简化数据库编写)是一个基于 promise 的 Node.js ORM, 目前支持 Postgres, MySQL ...
- 【深入浅出Node.js系列十一】Node.js开发框架Express4.x
为什么80%的码农都做不了架构师?>>> #0 系列目录# 深入浅出Node.js系列 [深入浅出Node.js系列一]什么是Node.js [深入浅出Node.js系列二]N ...
- Deno 会取代 Node.js 吗?
[CSDN 编者按]几天前,Node 之父 Ryan Dahl 及 Deno 团队为我们正式带来了 Deno 1.0,据官方介绍,这是一个 JavaScript/TypeScript 运行时,使用 V ...
- node JS獲取GPS_「前端篇」node_modules 困境
作者: 杨健 转发连接:https://mp.weixin.qq.com/s/GCfv-Hshw4N2fCKVvAi6Kg 本文已经过原作者 杨健 转载授权,原文请点击阅读全文查看. Ryan 对于 ...
- 二十六、深入Node.js中的文件系统fs模块
@Author:Runsen @Date:2020/6/8 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...
- 二十八、Node.js中的RESTful API和接口设计
@Author:Runsen @Date:2020/6/9 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...
- 【Node.js】http-server 实现目录浏览服务
前言 node.js v12.18.2 用 node.js 实现目录浏览服务 前提,已经按照好Node.js http-server 官网:https://www.npmjs.com/package/ ...
最新文章
- mysql 默认读取位置
- 算法学习:回文自动机
- 终极对决!Dubbo 和 Spring Cloud 微服务架构到底孰优孰劣?
- MATLAB机器学习系列-8 极限学习机(Extreme Learning Machine, ELM)原理及其代码实现
- HNU 程序设计 飞机起飞时间安排
- CentOS6和CentOS7进入单用户模式重置root密码
- 【Linux】文件操作函数(系统调用函数)
- 评定数据之间的相似度指标----距离
- 遥感原理与应用_专家报告 | 叶绿素荧光卫星遥感—原理与应用
- 【权限设计】权限系统的设计——由浅至深
- 在线破解hash的优秀网站
- 文档型数据库MongoDB使用教程
- 图的表示(无权图和有权图)
- python 闲鱼_闲鱼上哪些商品抢手?Python 分析后告诉你
- Android发送图片到指定邮箱(仅客户端简单实现,不需服务端配合)
- 义乌机器人餐厅价格表_义乌一餐厅机器人端盘萌翻吃货
- 前端模糊匹配方式,前端正则模糊匹配
- 江苏2021高考成绩省内排名查询,2020年江苏高考成绩位次排名及一分一段表查询...
- dwmac/stmmac/eqos 远程唤醒(WOL) 驱动
- 【无标题】神马TV(前端apk文件_后端苹果cms v10)