nodejs篇 内置模块http 常用api

news2025/2/4 5:56:02

文章目录

    • 前提
    • 创建一个最基本的http服务器
    • req有哪些值得关注的信息
    • res常用的api
    • http.request(options[, callback])
    • server事件监听
      • checkContinue
      • checkExpectation
      • close
      • connect

前提

如果你觉得nodejs官方文档给的api太多,不知道哪些重要,请看下去,否则请前往https://nodejs.org/dist/latest-v10.x/docs/api/http.html

如果你认为官方文档全是英文,不太容易学,并且不在乎nodejs中文网站版本过低的问题,请前往
https://www.nodeapp.cn/http.html

创建一个最基本的http服务器

const http = require("http");

const server = http.createServer();

// 启动服务器,服务器端口在80
server.listen(80, "127.0.0.1", () => {
  console.log("服务器启动了");
});

// 对客户端的请求进行监听
server.on("request", (req, res) => {
  console.log("客户端请求了");
  console.log(req);
  res.write('请求结果')
  res.end()
});

req有哪些值得关注的信息

req是用来获取客户端请求信息的对象。

key作用
url请求的路由
method请求的方式
headers请求头
httpVersionhttp的版本

res常用的api

res是用来返回给客户端的数据的设置

key作用
statusCode设置响应码 比如 res.statusCode = 404
end结束当前的请求 该方法会通知服务器,所有响应头和响应主体都已被发送 res.end() 每次响应都必须调用
setHeader设置响应头
statusMessage设置响应码对应的响应信息 res.statusMessage = ‘not found it’
write该方法会发送一块响应主体。 它可被多次调用,以便提供连续的响应主体片段 res.write(‘结果’,‘utf-8’)
setTimeout设置超时的时间 res.setTimeout(msecs [, callback])
const http = require("http");

const server = http.createServer();

// 启动服务器,服务器端口在80
server.listen(80, "127.0.0.1", () => {
  console.log("服务器启动了");
});

// 对客户端的请求进行监听
server.on("request", (req, res) => {
  console.log("客户端请求了");
  // charset=utf-8 防止中文乱码
  res.setHeader('Content-Type', 'text/html;charset=utf-8');
  res.statusCode = 404
  res.statusMessage = 'not found it' 
  res.write('请求结果','utf-8')
  res.end()
});

在这里插入图片描述

http.request(options[, callback])

在实际开发中,我们常常将nodejs作为一个中转站,nodejs去请求目标服务器的数据,经过处理后,再通过nodejs的接口,将数据提供给客户端。

http 能够用来创建一个接口,开启一整个服务器以供客户端请求,当然也可以请求其它的接口。

http的request的方法,就用来请求接口,第一个参数options必填,主要是请求的一些基本参数。

options <Object> | <string> | <URL>
protocol <string> 使用的协议。默认为 http:。
host <string> 请求发送至的服务器的域名或 IP 地址。默认为 localhost。
hostname <string> host 的别名。为了支持 url.parse(),hostname 优先于 host。
family <number> 当解析 host 和 hostname 时使用的 IP 地址族。 有效值是 46。当未指定时,则同时使用 IP v4 和 v6。
port <number> 远程服务器的端口。默认为 80。
localAddress <string> 为网络连接绑定的本地接口。
socketPath <string> Unix 域 Socket(使用 host:port 或 socketPath)。
method <string> 指定 HTTP 请求方法的字符串。默认为 'GET'。
path <string> 请求的路径。默认为 '/'。 应包括查询字符串(如有的话)。如 '/index.html?page=12'。 当请求的路径中包含非法字符时,会抛出异常。 目前只有空字符会被拒绝,但未来可能会变化。
headers <Object> 包含请求头的对象。
auth <string> 基本身份验证,如 'user:password' 用来计算 Authorization 请求头。
agent <http.Agent> | <boolean> 控制 Agent 的行为。 可能的值有:
undefined (默认): 对该主机和端口使用 http.globalAgent。
Agent 对象:显式地使用传入的 Agent。
false: 创建一个新的使用默认值的 Agent。
createConnection <Function> 当不使用 agent 选项时,为请求创建一个 socket 或流。 这可以用于避免仅仅创建一个自定义的 Agent 类来覆盖默认的 createConnection 函数。详见 agent.createConnection()。 Any Duplex stream is a valid return value.
timeout <number>: 指定 socket 超时的毫秒数。 它设置了 socket 等待连接的超时时间。

第二个参数是回调函数,可以在回调函数中获取响应头和响应体,状态码等信息

const http = require("http");

const server = http.createServer();

// 启动服务器,服务器端口在80
server.listen(80, "127.0.0.1", () => {
  console.log("服务器启动了");
});

// 对客户端的请求进行监听
server.on("request", (req, res) => {
  console.log("客户端请求了");
  // charset=utf-8 防止中文乱码
  res.setHeader('Content-Type', 'text/html;charset=utf-8');
  res.statusCode = 404
  res.statusMessage = 'not found it' 
  res.write('请求结果','utf-8')
  res.end()
});


// 请求刚刚创建的服务器
const options = {
  hostname: '127.0.0.1',
  port: 80,
  path: '/',
  method: 'get',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
  }
};

const req = http.request(options, (res) => {
  console.log(`状态码: ${res.statusCode}`);
  console.log(`响应头: ${JSON.stringify(res.headers)}`);
  res.setEncoding('utf8');
  res.on('data', (chunk) => {
    console.log(`响应主体: ${chunk}`);
  });
  res.on('end', () => {
    console.log('响应中已无数据。');
  });
});

req.end();

在这里插入图片描述

注意,在例子中调用了 req.end()。 使用 http.request() 必须总是调用 req.end() 来表明请求的结束,即使没有数据被写入请求主体

如果请求过程中遇到任何错误(DNS 解析错误、TCP 级的错误、或实际的 HTTP 解析错误),则在返回的请求对象中会触发 ‘error’ 事件。 对于所有的 ‘error’ 事件,如果没有注册监听器,则抛出错误。

server事件监听

最常用的无疑就是上面代码所用的request,除了request外,还有checkContinue、checkExpectation、clientError、close、connect、connection、upgrade

checkContinue

客户端如果是post请求,可能会使用 Expect: 100-continue,即在请求头中加入 {“Expect”:”100-continue”}

服务端每当接收到一个带有 HTTP Expect: 100-continue 请求头的请求时触发。 如果该事件未被监听,则服务器会自动响应 100 Continue。即默认同意与客户端握手,客户端可以开始发送post请求。

checkExpectation

与checkContinue正好相反,服务端每当接收到一个带有 HTTP Expect 请求头(值不为 100-continue)的请求时触发。 如果该事件未被监听,则服务器会自动响应 417 Expectation Failed。
注意,当该事件被触发且处理后,‘request’ 事件不会被触发。

close

当关闭服务器时触发

connect

每当客户端发送 HTTP CONNECT 请求时触发。 如果该事件未被监听,则发送 CONNECT 请求的客户端会关闭连接。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/103538.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TensorRT全方位概览笔记

TensorRT &#xff08;基于8.2.3&#xff09;1.简介1.export1.1 使用tensorrt API 搭建1.2 使用parser1.3 使用框架内 tensorrt 接口1.4 注意事项2.开发辅助工具2.1 trtexec2.2 Netron2.3 onnx-graphsurgeon2.4 polygraphy2.5 Nsight Systems3. plugin3.1 plugin3.2 使用3.3 类…

就离谱!使用机器学习预测2022世界杯:小组赛挺准,但冠亚季军都错了 ⛵

&#x1f4a1; 作者&#xff1a;韩信子ShowMeAI &#x1f4d8; 数据分析实战系列&#xff1a;https://www.showmeai.tech/tutorials/40 &#x1f4d8; 机器学习实战系列&#xff1a;https://www.showmeai.tech/tutorials/41 &#x1f4d8; 本文地址&#xff1a;https://www.sho…

C2. Potions (Hard Version)(可以后悔的选取 + 一种新奇的优先队列用法)

Problem - 1526C2 - Codeforces 这是该问题的困难版本。唯一不同的是&#xff0c;在这个版本中&#xff0c;n≤200000。只有当两个版本的问题都解决了&#xff0c;你才能进行黑客攻击。 有n个药水排成一行&#xff0c;最左边是药水1&#xff0c;最右边是药水n。每种药水在喝下…

Eclipse安装和环境的基本配置

Eclipse安装 安装包 链接&#xff1a;https://pan.baidu.com/s/13LXiyGmgdAQ2MYXhim1WMg 提取码&#xff1a;WADS 不会安装的可以参考这篇文章 链接: 安装教程文章 eclipse怎么更改存储位置 1.1 file-> Switch Workspace ->Other 打开后可以看到保存文件的路径也可以…

疫情之下连锁餐饮行业积极求变,集团采购协同管理系统重构企业采购数字化

2019年底至今&#xff0c;新冠肺炎疫情已进入了第三个年头。作为接触性、聚集性行业&#xff0c;国内餐饮业持续承压&#xff0c;经历了一系列的波折。尤其2022年以来&#xff0c;国内多地出现了此起彼伏的疫情&#xff0c;给餐企带来了较大冲击&#xff0c;餐饮行业整体营收收…

【推荐】安全访问服务边缘(SASE)资料汇总合集24篇

Secure Access Service Edge (SASE) 是Gartner推出的一个新的技术理念。SASE将 SD-WAN和网络安全解决方案&#xff08;FWaaS、CASB、SWG 和ZTNA&#xff09;融合到统一的云原生服务中。SASE是Gartner最新提出的一个技术理念&#xff0c;SASE用于从分布式云服务交付聚合的企业网…

Web前端105天-day49-jQuery

jQuery02 目录 前言 一、复习 二、标签内容 三、get请求 四、新增子元素 五、委托 六、克隆 七、加载HTML 八、准备就绪 九、Node.js 十、js中提示jQuery的方案 十一、location 十二、根据地址栏参数加载页面 十三、全局样式变量 总结 前言 jQuery02学习开始 一…

vi\vim编辑器的使用及命令、快捷键

vi\vim编辑器 1、vi\vim编辑器介绍 vi\vim是visual interface的简称&#xff0c;是Linux中最经典的文本编辑器。 同图形化界面中的文本编辑器一样&#xff0c;vi是命令行下对文本文件进行编辑的绝佳选择。 vim是vi的加强版本&#xff0c;兼容vi的所有指令&#xff0c;不仅能…

信息化时代,相比于人工服务客户更喜欢自助式服务

对于SaaS产品&#xff0c;为客户提供自助式服务&#xff0c;帮助客户能够自行完成任务和解决问题&#xff0c;给到客户更好的使用体验&#xff0c;对于SaaS产品&#xff0c;搭建一个自助式知识库门户和产品知识库尤为重要。在选购产品后&#xff0c;如果没有获得很好的客户服务…

TraceView使用

TraceView 是什么&#xff1f; TraceView 是 Android SDK 中内置的一个工具&#xff0c;用于加载 trace 文件&#xff0c;用图形的形式展示代码的执行时间、调用次数及调用栈&#xff0c;便于我们分析。 如何生成 trace 文件&#xff1f; 使用代码生成 Debug.startMethodTra…

新零售时代下,物流行业迎来新机遇

电商&#xff0c;一个异军突起的新行业&#xff0c;将改变传统商业旧模式。根据相关数据显示&#xff0c;2010-2019年&#xff0c;我国电商交易规模从4.5万亿元增长到34.8万亿元&#xff0c;年均复合增速达25%。在电商飞速发展的态势下&#xff0c;物流行业也迎来了蓬勃发展。 …

【华为OD机试真题2023 JAVA】去除多余空格

华为OD机试真题,2023年度机试题库全覆盖,刷题指南点这里 去除多余空格 知识点字符串数组队列 时间限制:2s 空间限制:256MB 限定语言:不限 题目描述: 去除文本多余空格,但不去除配对单引号之间的多余空格。给出关键词的起始和结束下标,去除多余空格后刷新关键词的起始和…

Python3和Django的单元测试示例

1. unittest unittest是python自带的单元测试框架&#xff0c;unittest框架是受到 JUnit 的启发&#xff0c;与其他语言中的主流单元测试框架有着相似的风格。其支持测试自动化&#xff0c;配置共享和关机代码测试。支持将测试样例聚合到测试集中&#xff0c;并将测试与报告框…

性能测试(二)—— JMeter元件作用域和执行顺序、JMeter示例、JMeter参数化

目录 一、JMeter元件作用域和执行顺序 1. 元件的基本介绍 2. 元件作用域 3. 元件执行顺序 二、JMeter使用示例 1. JMeter第一个案例 2. 重点组件 2.1 线程组 2.2 HTTP请求 2.3 查看结果树 三、JMeter参数化 1. JMeter参数化常用方式 2. 用户定义的变量 2.1 场景 …

详解OpenCV的线段绘制函数line()

函数line()用于在图像上绘制圆形。 函数line()利用两点确定一条直线的原理在图像中绘制出一条线段。 C原型如下&#xff1a; void cv::line(InputOutputArray img,Point pt1,Point pt2,const Scalar & color,int thickness 1,int lineType LINE_8,int shift 0)Python原…

智能优化算法:人工蜂鸟算法 - 附代码

智能优化算法&#xff1a;人工蜂鸟算法 摘要&#xff1a;人工蜂鸟算法( AHA )是 ZHAO 等 于 2021 年提出的一种新型元启发式优化算法 . 该算法模拟了自然界中蜂鸟轴向飞行、对角飞行、全方位飞行 3 种特殊飞行技能和引导觅食、区域觅食、迁移觅食 3 种智能觅食策略,并通过引入…

【大数据入门核心技术-Spark】(三)Spark 本地模式安装

目录 一、Spark集群三种部署模式 1、 Local模式 2、Spark Standalone模式 3、Spark on YARN模式 二、准备工作 1、Hadoop环境安装 2、下载spark 三、安装spark 1、解压 2、配置环境变量 3、修改配置文件 4、测试安装是否成功 四、运行测试spark 1、读取本地文件 …

【Java|golang】1760. 袋子里最少数目的球---逆向二分法

给你一个整数数组 nums &#xff0c;其中 nums[i] 表示第 i 个袋子里球的数目。同时给你一个整数 maxOperations 。 你可以进行如下操作至多 maxOperations 次&#xff1a; 选择任意一个袋子&#xff0c;并将袋子里的球分到 2 个新的袋子中&#xff0c;每个袋子里都有 正整数…

buildroot 升级软件包

因为软件漏洞问题&#xff0c;需要升级软件包&#xff0c;如 ncurses、libpwquality 等&#xff1b; 我目前采用的方法如下&#xff1a; 环境&#xff1a; 下载一个 buildroot 的最新版本&#xff1a; git clone git://git.buildroot.net/buildroot.git 我使用的 linux 环…

深入底层,spring mvc父子容器初始化过程解析

spring mvc父子容器初始化过程解析1、为什么要学习spring mvc底层&#xff1f;2、Java Web应该学什么&#xff1f;1、Tomcat2、servlet3、filter4、listener3、spring mvc容器初始化过程1、以WebApplicationInitializer.onStartup()方法作为入口2、registerDispatcherServlet()…