前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >node.js第十课(HTTPserver)

node.js第十课(HTTPserver)

作者头像
全栈程序员站长
发布2022-07-13 14:20:12
7960
发布2022-07-13 14:20:12
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

概念: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://javaforall.cn/118461.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年12月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云代码分析
腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档