概念:Node.js提供了http模块。其中封装了一个高效的HTTP服务器和一个简单的HTTP客户端。
http.server是一个基于事件的HTTP服务器。内部用C++实现。接口由JavaScript封装。
http.request则是一个HTTP客户端工具。用户向服务器发送请求。
一、HTTP服务器
http.Server实现的,它提供了一套封装级别很低的API,仅仅是流控制和简单的解析,所有的高层功能都需要通过它的接口
前面讲解的app.js案例
代码分析:
http.createServer创建了一个http.Server的实例,将一个函数作为HTTP请求处理函数。这个函数接受两个参数,请求对象req和响应对象的res。
res显式写入了响应代码200(表示请求成功),指定响应头,写入响应体。调用end结束并发送。该实例调用listen函数,启动服务器并监听3000端口。
1.http.Server的事件
http.Server是一个基于事件的HTTP服务器,所有请求都被封装到独立的事件,开发者只要对它的事件编写相应的函数即可实现HTTP服务器的所有功能,
它继承与EventEmitter,提供了以下事件:
request:当客户端请求到来时,该事件被触发,提供两个参数req和res,分别是http.ServerRequest和http.ServerResponse的实例,表示请求和响应信息。
connection:当TCP连接建立时,该事件被触发,提供一个参数socket,为net.Socket的实例(底层协议对象)。
close:当服务器关闭时,该事件被触发。
除此之外还有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:客户端请求是否已经发送完成
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请求会大大消耗服务器的资源。所以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返回给客户端的信息
决定了用户最终能到的结果,它是由http.Server的reponse对象发送的,作为第二个参数传递。一般为response或res
主要的三个函数:
response.writeHead(statusCode,[headers]):向请求的客户端发送响应头。
statusCode是HTTP的状态码,如200为成功,404未找到等。
headers是一个类似关联数组的对象,表示响应头的每个属性。
response.write(data,[encoding]) 向请求客户端发送相应内容,data是buffer或字符串,encoding为编码
response.end([data],[encoding]) 结束响应,告知用户所有发送已经完成,当所有要返回的内容发送完毕,该函数必须被调用一次,如果不调用,客户端永远处于等待状态
分享到:
相关推荐
第1章 Node.js简介 1 1.1 Node.js是什么 2 1.2 Node.js能做什么 3 1.3 异步式I/O与事件驱动 4 1.4 Node.js的性能 5 1.4.1 Node.js架构简介 5 1.4.2 Node.js与PHP+Nginx 6 1.5 JavaScript简史 6 ...
第1章 Node.js简介 1 1.1 Node.js是什么 2 1.2 Node.js能做什么 3 1.3 异步式I/O与事件驱动 4 1.4 Node.js的性能 5 1.4.1 Node.js架构简介 5 1.4.2 Node.js与PHP+Nginx 6 1.5 JavaScript简史...
注意: Node.js MongoDB AngularJSWeb开发((中文版))pdf 由于文件比较大,次分为三部分上传,下载好三部分之后,放在同一个文件夹下,进行解压即可,另外两部分地址为: part2:...
带有Node.js 10的RESTful Web API设计-第三版这是发行的的代码存储库。 它包含从头到尾完成本书所必需的所有支持项目文件。关于这本书本书面向希望通过学习如何基于Node.js平台开发可扩展的服务器端RESTful应用程序...
该课程是一个开源课程,涵盖了从使用JavaScript和Node.js的基础知识到如何将其与Azure Service Bus,网站甚至是IoT场景等云服务一起使用的所有内容。 该课程包括10个动手实验,涵盖以下模块: 第一天 JavaScript和...
10 2.4 npm............................................................................................................................................11 2.5 用 Node 实现的简单 Web 服务器................
Node.js是一套用来编写高性能网络服务器的JavaScript工具包。Backbone.js是面向客户端的JavaScript框架。MongoDB是一种NoSQL的数据库。三者结合使用,可以构建出高效的Web引用。 《Node应用程序构建——使用MongoDB...
第10课 第11- 第12课- 节点相关入门资料 1. JavaScript 2.节点 3. web服务器框架 表达 考阿 thinkjs 网络套接字 模板引擎 模板引擎的讨论 3.数据库 Mongodb Node一些精品教程 书籍推荐 相关技能 吉特 降价促销 ...
Node.js是一套用来编写高性能网络服务器的JavaScript工具包。Backbone.js是面向客户端的JavaScript框架。MongoDB是一种NoSQL的数据库。三者结合使用,可以构建出高效的Web引用。 《Node应用程序构建——使用MongoDB...
第二个演示遍历了更复杂的Node.js应用程序的结构,包括基本的Express应用程序布局,还展示了将Node.js站点安装到Azure中是多么容易。 第三个演示添加了Edge.js以及从Node.js调用C#文件的功能。 资源 在本演讲的...
这些课程将教您Node.js的基础知识,例如使用文件系统,创建自定义模块,甚至创建自己的Web服务器。资源使用以下资源来完成课程:学习你的节点安装并运行learnyounode $ sudo npm install learnyounode -g$ ...
用node.js编写的客户端 要求 node.js 安装 使用npm npm install nodemw 或通过GitHub。 开发版 git clone https://github.com/macbre/nodemw.git 产品特点 HTTP请求存储在队列中,并与有限数量的“线程”并行执行...
下载并安装“ WAMP服务器”(仅一次安装)*(如果已安装WAMP,请跳过此步骤) 运行“ SetUp_Chess_DB.bat”(仅一次设置) 下载并安装“ node.js”(仅一次设置)*(如果已安装node.js,请跳过此步骤) 要运行应用...
Periodic是一个用于使用express&node.js快速开发与数据库无关的企业应用程序和API的库。入门 使用Periodic 10,您可以在零配置的情况下启动并运行。 定期创建第一台应用程序服务器需要30秒。 $ npm install ...
第十天: 实践。 问题。 第15天: 实践。 问题。 Node.js Переченьтемнакурсе: День1 介绍NodeJS。 Npm。 核心库。 要求。 异步代码。 使用NodeJS的文件系统。 正在记录。 简单的HTTP...
简介: 多端点播系统、录播、 可以发布多级选集视频 问答、题库、资讯、营销推广、等功能 源码包含:h5+小程序+app ...第十一步:修改前端项目的 /common/lib/config.js和manifest.json里面的域名即可
关于NW.js的一些知识 第一的: $> cd nw-address-book ... 您还可以使用Web开发中常见的服务器->客户端架构来构建应用程序(请考虑express.js)。 但是,使用nw.js却对此视而不见。 我们在这里写所有客户端代码男孩。
第10章 重构后的grid / 500 10.1 grid的基类及其构成 / 500 10.1.1 概述 / 500 10.1.2 表格面板的运行流程:ext.panel.table / 500 10.1.3 表格视图的运行流程:ext.view.table与ext.view.tablechunker / 505 ...
架构:后端:Docker + Nginx + SpringBoot + SpringCloud + SpringMVC + MyBatis-Plus + MySQL + Maven前端:Node.js + Vue.js + vueAdmin-template + Nuxt.js + NPM + WebPack项目前后端分离开发前端使用Node.js + ...
到目前为止,我们已经涵盖了以下主题:Git,终端,GitHub,GitHub页面,Web可访问性,HTML,CSS,JavaScript,jQuery,Bootstrap,DOM遍历,Web API,第三方API,服务器端API,Node.js ,Inquirer.js,Express.js和...