Nodejs基础6之HTTP模块的获取请求行和请求头、获取请求体、获取请求路径和查询字符串、http请求练习、设置HTTP响应报文、http响应练习

Nodejs基础

  • HTTP模块
    • 获取请求行和请求头
    • 获取请求体
    • 获取请求路径和查询字符串
      • 方式一
      • 方式二
    • http请求练习
    • 设置HTTP响应报文
      • 状态码
      • 响应状态描述
      • 响应头
      • 响应体
    • HTTP响应练习

HTTP模块

含义语法重点掌握
请求方法request.method*
请求版本request.httpVersion
请求路径request.url*
URL 路径require(‘url’).parse(request.url).pathname*
URL 查询字符串require(‘url’).parse(request.url, true).query*
请求头request.headers*
请求体request.on(‘data’, function(chunk){}),request.on(‘end’, function(){});

获取请求行和请求头

// 1、导入http模块
const http=require('http')// 2、创建服务对象
const server=http.createServer((request,response)=>{response.end('hello http')  //设置响应体// 获取请求的方法console.log("request.method:",request.method)// 获取请求的urlconsole.log("request.url:",request.url)  //只包含url中的路径与查询字符串// 获取http协议的版本号console.log("request.httpVersion:",request.httpVersion)// 获取http的请求头console.log("request.headers:",request.headers);console.log("request.headers.host",request.headers.host)  //获取单个的请求头
})// 3、监听端口,启动服务
server.listen(9000,()=>{console.log('服务已经启动...')
})

浏览器发送请求:
请添加图片描述
终端输出内容:
请添加图片描述

获取请求体

//1、导入http模块
const http=require('http')//2、创建服务对象
const server=http.createServer((request,response)=>{//1.声明一个变量let body=''//2.绑定data事件request.on('data',chunk => {body+=chunk  //进行加法运算时候,会将字节自动转换为字符串进行加法运算})//3.绑定end事件request.on('end',()=>{console.log(body)//响应response.end('httpServer')})
})server.listen(9000,()=>{console.log("服务器已经启动了...")
})

form表单

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<form action="http://127.0.0.1:9000" method="post"><input type="text" name="username"> <br><input type="password" name="password"> <br><input type="submit" value="提交">
</form>
</body>
</html>
  1. 启动服务
    在这里插入图片描述

  2. 浏览器打开form表单,输入账户密码,点击提交
    在这里插入图片描述

  3. 提交之后页面跳转链接

在这里插入图片描述

  1. 终端输出url拼接字符串
    在这里插入图片描述

获取请求路径和查询字符串

方式一

const http=require('http')
//1、引入url模块
const url=require('url')const server = http.createServer((request,response)=>{//2、解析request.urlconst res=url.parse(request.url)console.log("res",res)// 路径console.log("res.pathname",res.pathname);// 解析request.url 第二个参数设置为trueconst resObj=url.parse(request.url,true)console.log("resObj",resObj)// 查询字符串console.log("resObj.query.keyword",resObj.query.keyword)response.end('url')
});server.listen(9000,()=>{console.log("服务器已经启动......")
})

发送了两个请求
在这里插入图片描述
输出的也是两个请求的内容:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

方式二

const http=require('http')const server=http.createServer((request,response)=>{// 实例化url对象// let url=new URL('/search?a=100&b=200','http://127.0.0.1:9000')let url=new URL(request.url,'http://127.0.0.1')console.log("url",url)//输出路径console.log("url.pathname",url.pathname)//输出 keyword 查询字符串console.log("url.searchParams.get('keyword')",url.searchParams.get('keyword'))response.end('url new')
})server.listen(9000,()=>{console.log("服务已经启动...")
})

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

http请求练习

按照以下要求搭建 HTTP 服务

请求类型(方法)请求地址响应体结果
get/login登录页面
get/reg注册页面
const http=require('http')const server = http.createServer((request,response)=>{//获取请求的方法let {method} = request//获取请求的url路径let {pathname}=new URL(request.url,'http://127.0.0.1')response.setHeader('content-type','text/html;charset=utf-8')//判断if(method==='GET'&&pathname==='/login'){//登录的情形response.end('登录页面')}else if(method==="GET"&&pathname==='/reg'){  //register 注册response.end('注册页面')}else{response.end('Not Found')}
});server.listen(9000,()=>{console.log("服务已经启动...")
})

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

设置HTTP响应报文

作用语法
设置响应状态码response.statusCode
设置响应状态描述response.statusMessage (用的非常少)
设置响应头信息response.setHeader(‘头名’, ‘头值’)
设置响应体response.write(‘xx’)
response.end(‘xxx’)

状态码

const http=require('http')const server = http.createServer((request,response)=>{//1、设置响应状态码response.statusCode=205response.end('response')
});server.listen(9000,()=>{console.log("服务已经启动....")
})

在这里插入图片描述
2.

const http=require('http')const server = http.createServer((request,response)=>{//1、设置响应状态码response.statusCode=205response.statusCode=404response.end('response')
});server.listen(9000,()=>{console.log("服务已经启动....")
})

在这里插入图片描述

响应状态描述

const http=require('http')const server = http.createServer((request,response)=>{//1、设置响应状态码// response.statusCode=205// response.statusCode=404//2、设置响应状态描述response.statusMessage='iloveyou';response.end('response')
});server.listen(9000,()=>{console.log("服务已经启动....")
})

在这里插入图片描述

响应头

const http=require('http')const server = http.createServer((request,response)=>{//1、设置响应状态码// response.statusCode=205// response.statusCode=404//2、设置响应状态描述// response.statusMessage='iloveyou';//3、响应头response.setHeader('content-type','text/html;charset=utf-8')response.end('response')
});server.listen(9000,()=>{console.log("服务已经启动....")
})

在这里插入图片描述

const http=require('http')const server = http.createServer((request,response)=>{//1、设置响应状态码// response.statusCode=205// response.statusCode=404//2、设置响应状态描述// response.statusMessage='iloveyou';//3、响应头// response.setHeader('content-type','text/html;charset=utf-8')response.setHeader('Server','Node.js')response.end('response')
});server.listen(9000,()=>{console.log("服务已经启动....")
})

在这里插入图片描述

const http=require('http')const server = http.createServer((request,response)=>{//1、设置响应状态码// response.statusCode=205// response.statusCode=404//2、设置响应状态描述// response.statusMessage='iloveyou';//3、响应头// response.setHeader('content-type','text/html;charset=utf-8')// response.setHeader('Server','Node.js')response.setHeader('myServer','test test test')response.end('response')
});server.listen(9000,()=>{console.log("服务已经启动....")
})

在这里插入图片描述

const http=require('http')const server = http.createServer((request,response)=>{//1、设置响应状态码// response.statusCode=205// response.statusCode=404//2、设置响应状态描述// response.statusMessage='iloveyou';//3、响应头// response.setHeader('content-type','text/html;charset=utf-8')// response.setHeader('Server','Node.js')// response.setHeader('myServer','test test test')response.setHeader('test',['a','b','c'])response.end('response')
});server.listen(9000,()=>{console.log("服务已经启动....")
})

在这里插入图片描述

  1. 还可以一起来
const http=require('http')const server = http.createServer((request,response)=>{//1、设置响应状态码// response.statusCode=205// response.statusCode=404//2、设置响应状态描述// response.statusMessage='iloveyou';//3、响应头response.setHeader('content-type','text/html;charset=utf-8')response.setHeader('Server','Node.js')response.setHeader('myServer','test test test')response.setHeader('test',['a','b','c'])response.end('response')
});server.listen(9000,()=>{console.log("服务已经启动....")
})

在这里插入图片描述

响应体

const http=require('http')const server = http.createServer((request,response)=>{//1、设置响应状态码// response.statusCode=205// response.statusCode=404//2、设置响应状态描述// response.statusMessage='iloveyou';//3、响应头// response.setHeader('content-type','text/html;charset=utf-8')// response.setHeader('Server','Node.js')// response.setHeader('myServer','test test test')// response.setHeader('test',['a','b','c'])//4、设置响应体response.write('how')response.write('are')response.write('you')//一般设置了响应体之后就不设置end了,但是end只能有一个response.end()
});server.listen(9000,()=>{console.log("服务已经启动....")
})

在这里插入图片描述

HTTP响应练习

搭建 HTTP 服务,响应一个 4 行 3 列的表格,并且要求表格有隔行换色效果,且点击单元格能高亮显示

const http=require('http')const server=http.createServer((request,response)=>{response.end(`<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Title</title><style>table{cursor: pointer;}td{padding: 20px 40px;}table tr:nth-child(odd){background-color:pink;}table tr:nth-child(even){background-color: skyblue;}</style></head><body><table border="1" style="border-collapse: collapse"><tr><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td></tr></table><script>let tds=document.querySelectorAll('td')tds.forEach(item=>{item.οnclick=function (){this.style.backgroundColor='lightcyan'}})</script></body></html>`)
})server.listen(9000,()=>{console.log("服务已经启动...")
})

请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

零基础学Python(9)— 流程控制语句(下)

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。流程控制语句是编程语言中用于控制程序执行流程的语句&#xff0c;本节课就带大家认识下Python语言中常见的流程控制语句&#xff01;~&#x1f308; 目录 &#x1f680;1.while循环 &#x1f680;2.for循环 &#x1…

Redis核心技术与实战【学习笔记】 - 31.番外篇:Redis客户端如何与服务器端交换命令和数据

简述 Redis 使用 RESP 协议&#xff08;Redis Serialzation Protocol&#xff09;协议定义了客户端和服务器端交互的命令、数据的编码格式。在 Redis 2.0 版本中&#xff0c;RESP 协议正式称为客户端和服务器端的标准通信协议。从 Redis 2.0 到 Redis 5.0 &#xff0c;RESP 协…

[算法前沿]--059-大语言模型Fine-tuning踩坑经验之谈

前言 由于 ChatGPT 和 GPT4 兴起,如何让人人都用上这种大模型,是目前 AI 领域最活跃的事情。当下开源的 LLM(Large language model)非常多,可谓是百模大战。面对诸多开源本地模型,根据自己的需求,选择适合自己的基座模型和参数量很重要。选择完后需要对训练数据进行预处…

STM32之USART

概述 串口通信&#xff0c;通用异步收发传输器&#xff08;Universal Asynchronous Receiver/Transmitter &#xff09;&#xff0c;简称UART&#xff1b;而USART&#xff08;Universal Synchronous/Asynchronous Receiver/Transmitter&#xff09;通用同步收发传输器。 USAR…

JavaScript鼠标移动事件

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;《爱蹦跶的大A阿》 &#x1f525;当前正在更新专栏&#xff1a;《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ ​ ✨ 前言 鼠标移动是用户界面中非常重要的交互行为。学习区分不同的鼠标移动事…

小白也能学会的Oracle优化教程-主打零基础

没错&#xff0c;这一篇不是标题党&#xff0c;真的是小白也能学会的Oracle 优化教程&#xff0c;学会了能解决很大一部分优化问题&#xff01;&#xff01; 1、这篇文章适用于哪些人 尤其适用于我这样的数据库小白、系统工程师、不懂SQL优化的部分开发人员。 如果你是一个专…

Web后端开发:事务与AOP

事务管理 在学习数据库时&#xff0c;讲到&#xff1a;事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位。事务会把所有的操作作为一个整体&#xff0c;一起向数据库提交或者是撤销操作请求&#xff0c;要么同时成功&#xff0c;要么同时失败。 事务的操作主要有三…

Seurat - 聚类教程 (1)

设置 Seurat 对象 在本教程[1]中&#xff0c;我们将分析 10X Genomics 免费提供的外周血单核细胞 (PBMC) 数据集。在 Illumina NextSeq 500 上对 2,700 个单细胞进行了测序。可以在此处[2]找到原始数据。 我们首先读取数据。 Read10X() 函数从 10X 读取 cellranger 管道的输出&…

nvm安装nodejs 报错certificate has expired or is not yet valid

今天在使用nvm安装nodejs时&#xff0c;突然报如下错误&#xff1a; 从报错信息中很容易知道这是因为镜像凭证过期&#xff0c;所以我们只需要换个镜像即可。 打开你nvm的安装目录下的settings.txt文件&#xff0c;将下面两行添加到里面&#xff0c;如果已经有的就覆盖。 nod…

猫头虎分享已解决Bug || 深入剖析内存溢出问题:OutOfMemoryError or MemoryLeakException

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

RocketMQ事务消息

事务消息 应用场景&#xff1a; ​ 事务消息是RocketMQ非常有特色的一个高级功能。他的基础诉求是通过RocketMQ的事务机制&#xff0c;来保证上下游的数据一致性。 ​ 以电商为例&#xff0c;用户支付订单这一核心操作的同时会涉及到下游物流发货、积分变更、购…

MATLAB实现LSTM时间序列预测

LSTM模型可以在一定程度上学习和预测非平稳的时间序列,其具有强大的记忆和非线性建模能力,可以捕捉到时间序列中的复杂模式和趋势[4]。在这种情况下,LSTM模型可能会自动学习到时间序列的非平稳性,并在预测中进行适当的调整。其作为循环神经网络(RNN)的特殊形式,继承了循…