Node进阶:核心模块http简介
本文摘录自《Nodejs学习笔记》,更多章节及更新,请访问 github主页地址。
http模块概览
大多数nodejs开发者都是冲着开发web server的目的选择了nodejs。正如官网所展示的,借助http模块,可以几行代码就搞定一个超迷你的web server。
在nodejs中,http
可以说是最核心的模块,同时也是比较复杂的一个模块。上手很简单,但一旦深入学习,不少初学者就会觉得头疼,不知从何入手。
本文先从一个简单的例子出发,引出http
模块最核心的四个实例。看完本文,应该就能够对http模块有个整体的认识。
一个简单的例子
在下面的例子中,我们创建了1个web服务器、1个http客户端
- 服务器server:接收来自客户端的请求,并将客户端请求的地址返回给客户端。
- 客户端client:向服务器发起请求,并将服务器返回的内容打印到控制台。
代码如下所示,只有几行,但包含了不少信息量。下一小节会进行简单介绍。
var http = require('http');// http server 例子
var server = http.createServer(function(serverReq, serverRes){var url = serverReq.url;serverRes.end( '您访问的地址是:' + url );
});server.listen(3000);// http client 例子
var client = http.get('http://127.0.0.1:3000', function(clientRes){clientRes.pipe(process.stdout);
});
例子解释
在上面这个简单的例子里,涉及了4个实例。大部分时候,serverReq、serverRes 才是主角。
- server:http.Server实例,用来提供服务,处理客户端的请求。
- client:http.ClientReques实例,用来向服务端发起请求。
- serverReq/clientRes:其实都是 http.IncomingMessage实。serverReq 用来获取客户端请求的相关信息,如request header;而clientRes用来获取服务端返回的相关信息,比如response header。
- serverRes:http.ServerResponse实例
关于http.IncomingMessage、http.ServerResponse
先讲下 http.ServerResponse 实例。作用很明确,服务端通过http.ServerResponse 实例,来个请求方发送数据。包括发送响应表头,发送响应主体等。
接下来是 http.IncomingMessage 实例,由于在 server、client 都出现了,初学者难免有点迷茫。它的作用是
在server端:获取请求发送方的信息,比如请求方法、路径、传递的数据等。
在client端:获取 server 端发送过来的信息,比如请求方法、路径、传递的数据等。
http.IncomingMessage实例 有三个属性需要注意:method、statusCode、statusMessage。
- method:只在 server 端的实例有(也就是 serverReq.method)
- statusCode/statusMessage:只在 client 端 的实例有(也就是 clientRes.method)
关于继承与扩展
http.Server
- http.Server 继承了 net.Server (于是顺带需要学一下 net.Server 的API、属性、相关事件)
- net.createServer(fn),回调中的
socket
是个双工的stream接口,也就是说,读取发送方信息、向发送方发送信息都靠他。
备注:socket的客户端、服务端是相对的概念,所以其实 net.Server 内部也是用了 net.Socket(不负责任猜想)
// 参考:https://cnodejs.org/topic/4fb1c1fd1975fe1e1310490b
var net = require('net');var PORT = 8989;
var HOST = '127.0.0.1';var server = net.createServer(function(socket){console.log('Connected: ' + socket.remoteAddress + ':' + socket.remotePort);socket.on('data', function(data){console.log('DATA ' + socket.remoteAddress + ': ' + data);console.log('Data is: ' + data);socket.write('Data from you is "' + data + '"');});socket.on('close', function(){console.log('CLOSED: ' +socket.remoteAddress + ' ' + socket.remotePort);});
});
server.listen(PORT, HOST);console.log(server instanceof net.Server); // true
http.ClientRequest
http.ClientRequest 内部创建了一个socket来发起请求,代码如下。
当你调用 http.request(options) 时,内部是这样的
self.onSocket(net.createConnection(options));
http.ServerResponse
- 实现了 Writable Stream interface,内部也是通过socket来发送信息。
http.IncomingMessage
- 实现了 Readable Stream interface,参考这里
- req.socket --> 获得跟这次连接相关的socket
Node进阶:核心模块http简介相关推荐
- (14)Node.js 核心模块—http
一.核心模块 - http模块介绍 • http 模块可以发布 web 服务,在没有学习http模块之前,我们都是用tomcat,nginx等服务器. • 使用之前,通过 require 引入 • 官 ...
- 前端基础-Node.js核心模块的使用
第2章 核心模块的使用 2.1.1 FS模块 node核心模块之一,用于操作文件: 中文手册 : http://nodejs.cn/api/fs.html 文件读写 // 引入模块 var fs = ...
- nodejs(五)node引入核心模块fs
前面我们说ndoe引入自己的模块,相对路径要加 './',否则就会根据名字去引入核心模块,nodejs文件读写的核心模块是fs(file-system),引入方法: var fs = require( ...
- (12)Node.js核心模块fs—实现文件复制和压缩
一.文件复制 将src目录下的style.css文件复制一份,到dist目录下. 二.文件压缩 文件压缩就是把我们书写的代码中的空格和注释进行删除,这样我们体积会变小,当我们上线到服务器时,给服务器造 ...
- (10)Node.js核心模块—fs文件系统之目录操作
一.创建目录 // 引入fs模块 const fs = require('fs') //创建目录(文件夹) //语法:fs.mkdir('目录路径',回调函数) fs.mkdir('./d1', (e ...
- (11)Node.js 核心模块fs – 同步函数( synchronization )
一.介绍图 再执行程序1时,把1.1和1.2丢到事件队列中,去异步执行,这样提高了效率,让执行速度更快. 如果使用同步,需要等待程序1完全执行完成后,才能去执行程序2. 二.同步函数 • 在主程序中自 ...
- node.js学习笔记5——核心模块1
node.js学习笔记5--核心模块1 Node.js核心模块主要内容包括:(1)全局对象 (2)常用工具 (3)事件机制 (4)文件系统访问 (5)HTTP服务器与客户端 一: 全局对象 Node. ...
- 【Node】Node核心模块
Node的核心模块 os模块 util模块 path模块 url模块 querystring模块 os模块 os模块提供一些操作系统相关的实用方法. 导入模块: const os = require( ...
- node中模块系统及核心模块、执行node文件
node中模块系统: 1.模块系统:核心模块.第三方模块. 自己写的模块. 2.网页中所有的路径都是URL,而不是文件路径. 3.node偏底层开发,开启的服务器完全是一个黑盒子,所有的资源默认都是不 ...
最新文章
- LeetCode简单题之生成每种字符都是奇数个的字符串
- java 线性的排序算法_077-线性查找分析和实现
- opencv的K近邻算法
- Python基础入门一(2)
- 前端学习(1185):数据响应式
- java des加密类_java的DES加密解密辅助类
- python词云图_人生苦短我用Python——词云图的绘制
- 笔记本电脑黑屏但还在运作怎么办
- atitit.元编程总结 o99
- 电影院售票系统html页面,电影院网上订票系统(全套).doc
- 点云数据的类型主要分为_点云数据处理方法概述
- python实战——密码生成器
- PDF文件怎么旋转保存
- 如何创建水晶报表模板
- 屏幕正中间浮窗html,HTML 纯css浮窗居中和打开or关闭
- TFN全新推出的全功能 手持式频谱分析仪 RMT系列 不仅可干扰定位 还可路测
- 微信提示已连接到服务器失败,微信提示无法连接到服务器如何解决
- 排查maven中可以从远程下载下来jar包,但是却报错Failure to find was cached in the local repository, resolution will not
- 用计算机无法解决打印所有,解决打印机无法打印的10种方法
- vue实现组件双向绑定
热门文章
- 原型模式(Prototype) 1
- Android开发之异步消息处理机制AsyncTask
- Dynamips 7200
- Koding VM 配置nginx 小记
- 从“救火”到“井然有序”
- 计算机专业三年级的学生英语,计算机专业英语 计算机专业英语对照表.doc
- 左边工具栏 隐藏_203 【Ps基础】 工具栏
- 数据分析在商业中的作用
- Cannot find class [***] for bean with name '***' defined in file[***]
- python工作目录_python获取当前工作目录