NodeJS基础之HTTP模块http
文章图片
前言
大家好,我是Lesedi,今天带来的是NodeJS中十分重要的模块--->http模块,一起来看看吧
引入
NodeJS的初衷就是希望能够完全由JavaScript来实现服务端开发。而NodeJS中的HTTP模块就是NodeJS内置的用来创建服务器的模块,下面我们来看看怎么使用HTTP模块吧
网络模块有两种使用方式
- 作为服务端使用,创建一个HTTP服务器,监听HTTP客户端请求并返回响应
- 【NodeJS基础之HTTP模块http】作为客户端使用,发起一个HTTP客户端请求,获取服务端响应
作为服务端---创建一个简单服务器
const http = require('http')
示例
//导入网络模块
const http = require('http')
//创建了一个HTTP服务器来接收数据并监听3000端口
http.createServer(function (req, res) {
//设置响应成功状态码200和内容类型
res.writeHead(200, {'Content-Type': 'text/plain'})
res.end('Hello World')
}).listen(3000)
此时,打开浏览器输入localhost:3000若看到Hello World,则代表一个简单的服务器就创建成功啦~
http.createServer常见是创建服务器的常用API,后面的回调函数存放想要进行的操作。它接收两个参数req即是request,客户端请求对象;res即是response,服务器响应的对象.另一种写法
其中req是http.IncomingMessage的实例 res是http.ServerRespons的实例
//导入http模块
const http = require("http");
//获取http.Server对象
const server = new http.Server();
//创建服务器,并监听3000端口
server.on("request",function(req,res) {
res.writeHead(200,{"content-type":"text/plain"});
res.write("Hello World");
res.end();
}).listen(3000);
以上代码是通过直接创建一个http.Server对象,然后为其添加request事件监听,其实也就说createServer方法其实本质上也是为http.Server对象添加了一个request事件监听。所以两种方法是等价的,怎么使用看个人习惯。
作为客户端---发起HTTP请求 HTTP -标准库
NodeJS内置的
http
模块提供了http.request和http.get两个函数,可以实现由客户端向HTTP服务器发起网络请求http.request
让我们来对百度首页进行网络请求,看看有什么效果吧
//导入模块
const http = require('http')const options = {
hostname: 'www.baidu.com', //地址
port: 80, //端口号
method: 'GET' //请求方法
};
const req=http.request(options,function(res){
res.setEncoding("utf-8");
//中文编码
res.on("data",function(data){
console.log(data) //获取的网页数据
});
console.log(res.statusCode);
//打印状态码
});
req.on("error",function(err){
console.log(err.message);
//报错信息
});
req.end();
//结束响应
在控制台执行该文件,即可打印出百度首页的HTML代码与响应成功的200状态码。
http.get
由于get请求方法很常见,所以http模块提供了便捷的API,所以
http.get
就相当于是http.requset
的简化版,值得注意的是http.get
不需要手动调用req.end()
http.get('http://www.baidu.com/', function (res) {
res.setEncoding("utf-8")
res.on("data",function(data){
console.log(data) //获取的网页数据
});
});
执行该文件,输出与http.request是一致的
小结 好啦,今天的分享就到这里啦,我们下次再见!
推荐阅读
- SpringBoot集成文件|SpringBoot集成文件 - 集成POI之Excel导入导出
- 业界观点|LLVM之父Chris Lattner(为什么我们要重建AI基础设施软件)
- 投稿|垂直电商:十年一梦间,从之道阻长
- python|零基础掌握OpenCV图像处理基本操作
- javaweb|计算机毕业设计之java+ssm的图书借阅系统
- Verilog|if-else(if判断语句和执行语句之间相差1个时钟周期吗(并行执行吗?有优先级吗?))
- Super|Super Idol | 决赛人气投票—与你共赴迷藏之约
- #|【小程序项目开发-- 京东商城】uni-app之商品列表页面 (下)
- 投稿|倒闭、缺人、没订单,困局之下的潮玩供应链
- Java之基本数据类型