Node学习笔记之 核心模块 - HTTP

http模块是Node.js网络的关键模块,主要用于搭建HTTP服务端和客户端。

创建服务器

//引入
const http = require('http')

// 创建服务器:使用http模块提供的createServer方法,该方法会返回一个http.Server类的新实例
/* http.ServerResponse:由http.Server创建并作为第二个参数传给它出触发的request事件(即下文的res)*/
const server = http.createServer((req, res) => {
	res.end('Hello World')
})

/*拥有服务器后可以访问其方法:listen()启动服务器并监听连接;close()停止服务器不再接受新连接*/
server.listen('3000', () => {
	console.log('Server is running @ port: 3000')
})

http.createServer()

用于创建服务器,返回http.Server类的实例。

http.Server

当使用http.createServer()创建服务器时,通常会实例化并返回此类。

http.ServerResponse

http.Server创建,并作为第二个参数传递给它出发的request事件。

end()

在事件处理函数中必须调用的方法是end(),用来关闭响应。可以向end()方法中传入数据,服务器会将数据响应给客户端。

write()

write()可以在响应正文中发送数据给客户端。

setHeader(‘headername’, value)

此方法用来设置HTTP消息头的值。

// eg.
const server = http.createServer(() => {
	res.setHeader('Content-type', 'text/plain;charset=utf-8');
	// charset=utf-8可以避免中文乱码
	res.write('你好,Lynn');
})
writeHead()

如果响应头还没被发送,则可以使用writeHead()发送响应头,其中包括已经设置过的状态码和消息。(显示设置消息头)

/* res.writeHead(statusCode[, statusMessage][, headers])
		statusCode: 状态码 <number>
		statusMessage: 状态信息 <string>
		headers: 消息头 <Object>
*/
res.writeHead(200, 'Success', { 'Content-Type': 'text/plain;charset=utf-8'})
statusCode & statusMessage

在使用隐式响应头(没有显示调用writeHead)时,通过这两个属性可以分别设置响应状态码和状态消息。

res.statusCode = 200;
res.statusMessage = 'Success';
其他
  • getHeaderNames() 获取已设置的HTTP消息头名称列表;
  • getHeaders() 获取已设置的HTTP消息头副本;
  • getHeader('headername') 获取已设置的消息头;
  • removeHeader('headername') 删除已设置的消息头;
  • hasHeader('headername) 是否已设置该消息头,返回true/false
  • headerSent() 消息头是否已被发送到客户端,返回true/false

创建客户端

const http = require('http');
 
 const options = {
	 hostname: 'localhost',
	 port: 3001,
	 path: '/',
	 method: 'post'
 }
 const callback = function (response) {
	 	let result = ''
	 	response.on('data', (data) => {
	 		result += data;
	 	});
	 	response.on('end', () => {
	 		console.log('服务器返回的数据是' + result)
	 	})
 }
 
const req = http.request(options, callback);

req.write('Hello Server');
req.end();

以上代码中若不定义callback函数,可以另外监听response事件:

// 监听response事件
req.on('response', (res) => {
	// console.log(res);
	let result = ''
	res.on('data', (data) => {
		result += data;
	});
	res.on('end', () => {
		console.log('服务器返回的数据是' + result)
	})
})

http.request() & http.get()

用于向服务器发送请求,两个方法的参数用法都差不多,区别在于http.get()将请求方法设置为GET并会自动调用req.end()。两者都会创建http.ClientRequest对象。

http.request(options[, callback])
http.get(options[, callback])

http.ClientRequest

http.request()http.get()被调用时,会创建http.ClientRequest对象。

const req = http.requset(options, callback);
读取响应数据

response事件处理函数中(http.IncomingMessage作为参数),为data事件设置事件监听器,以便监听流入的数据。

req.on('response', (res) => {
	let result = '';
	// 监听流入的数据
	// 响应数据不一定只有一次
	res.on('data', (data) => {
		result += data;
	});
	// 数据接收完毕
	res.on('end', () => {
		console.log(result);
	})
})

待续……

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值