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)
    // 获取请求的url
    console.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.url
    const res=url.parse(request.url)
    console.log("res",res)
    // 路径
    console.log("res.pathname",res.pathname);
    // 解析request.url 第二个参数设置为true
    const 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=205
    response.end('response')
});

server.listen(9000,()=>{
    console.log("服务已经启动....")
})

在这里插入图片描述
2.

const http=require('http')

const server = http.createServer((request,response)=>{
    //1、设置响应状态码
    response.statusCode=205
    response.statusCode=404
    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';
    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("服务已经启动...")
})

请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用PDFBox实现pdf转其他图片格式

最近在做一个小项目&#xff0c;项目中有一个功能要把pdf格式的图片转换为其它格式&#xff0c;接下来看看用pdfbox来如何实现吧。 首先导入pdfbox相关依赖&#xff1a; <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</a…

@ResponseBody

目录 概述 用途 使用案例 用 ResponseBody 设置返回值 概述 ResponseBody注解的作用是将方法返回的对象&#xff0c;通过适当的转换器(HttpMessageConverter)转换为指定的格式之后&#xff0c;写入到response对象的body区&#xff0c;通常用来返回JSON数据或者是XML数据 用…

re:从0开始的CSS学习之路 2. 选择器超长大合集

0. 写在前面 虽然现在还是不到25的青年人&#xff0c;有时仍会感到恐慌&#xff0c;害怕不定的未来&#xff0c;后悔失去的时间&#xff0c;但细细想来&#xff0c;只有自己才知道&#xff0c;再来一次也不会有太多的改变。 CSS的选择器五花八门&#xff0c;而且以后在JavaScr…

CISCRISC? CPU架构有哪些? x86 ARM?

编者按&#xff1a;鉴于笔者水平有限&#xff0c;文中难免有不当之处&#xff0c;还请各位读者海涵。 是为序 我猜&#xff0c;常年混迹CSDN的同学应该不会没听说过CPU吧&#xff1f; 但你真的了解CPU吗&#xff1f;那笔者问你CPU有哪些架构呢&#xff1f; 如果你对你的答案…

忘记 RAG:拥抱Agent设计,让 ChatGPT 更智能更贴近实际

RAG&#xff08;检索增强生成&#xff09;设计模式通常用于开发特定数据领域的基于实际情况的ChatGPT。 然而&#xff0c;重点主要是改进检索工具的效率&#xff0c;如嵌入式搜索、混合搜索和微调嵌入&#xff0c;而不是智能搜索。 这篇文章介绍了一种新的方法&#xff0c;灵感…

使用代理IP有风险吗?如何安全使用代理IP?

代理IP用途无处不在。它们允许您隐藏真实IP地址&#xff0c;从而实现匿名性和隐私保护。这对于保护个人信息、绕过地理受限的内容或访问特定网站都至关重要。 然而&#xff0c;正如任何技术工具一样&#xff0c;代理IP地址也伴随着潜在的风险和威胁。不法分子可能会滥用代理IP…

编程实例分享,麻将馆计时方法计费系统,棋牌室计时计费管理系统软件试用版教程

编程实例分享&#xff0c;麻将馆计时方法计费系统&#xff0c;棋牌室计时计费管理系统软件试用版教程 一、前言 以下教程以 佳易王棋牌计时计费管理系统软件V17.9为例说明 1、恢复上次状态&#xff1a;在突然停电或非正常关机情况下&#xff0c;再次打开软件&#xff0c;可以…

汽车零部件MES系统解决方案

汽车零部件行业现状 随着全球汽车产业不断升级&#xff0c;汽车零部件市场竞争日趋激烈&#xff0c;从上游的钢铁、塑料、橡胶等生产到下游的主机厂配套制造&#xff0c;均已成为全球各国汽车制造大佬战略目标调整的焦点&#xff0c;其意欲在汽车零部件行业快速开疆扩土&#x…

YOLOv5改进 | 细节涨点篇 | DySample一种超级轻量的动态上采样算子(效果完爆CARAFE)

一、 本文介绍 本文给大家带来的改进机制是一种号称超轻量级且有效的动态上采样器——DySample。与传统的基于内核的动态上采样器相比,DySample采用了一种基于点采样的方法,相比于以前的基于内核的动态上采样器,DySample具有更少的参数、浮点运算次数、GPU内存和延迟。此外…

【漏洞复现】EPON上行A8-C政企网关未授权下载漏洞

Nx01 产品简介 EPON上行A8-C政企网关是一款终端产品&#xff0c;提供企业网络解决方案。 Nx02 漏洞描述 EPON上行A8-C政企网关配置文件未授权下载漏洞&#xff0c;攻击者在未授权状态下下载配置文件&#xff0c;获取配置文件内敏感信息。 Nx03 产品主页 fofa-query: "Z…

架构整洁之道-软件架构-测试边界、整洁的嵌入式架构、实现细节

6 软件架构 6.14 测试边界 和程序代码一样&#xff0c;测试代码也是系统的一部分。甚至&#xff0c;测试代码有时在系统架构中的地位还要比其他部分更独特一些。 测试也是一种系统组件。 从架构的角度来讲&#xff0c;所有的测试都是一样的。不论它们是小型的TDD测试&#xff…

docker-学习-5

docker-学习第五天 docker-学习第五天1. 昨天的练习回顾1.1. 练习11.2. 练习2 2. 命令2.1. 看镜像的详细信息 3. Dockerfile指令3.1. 常见的指令3.2. ENTRYPOINT和CMD的区别3.3. RUN中的set指令 4. 镜像的原理4.1. 为什么 Docker 镜像要采用这种分层结构呢&#xff1f;4.2. doc…

mysql8通过binlog恢复数据

参考资料: 通过binlog恢复误update的数据(一)_binlog 恢复update-CSDN博客 记录一次工作中的误删除&#xff0c;使用binlog恢复数据的问题。 1&#xff1a;找到mysql8的binlog文件。 2&#xff1a;把binlog文件转换为初始sql文件 mysqlbinlog -vv --base64-outputdecode-row…

PySpark(三)RDD持久化、共享变量、Spark内核制度,Spark Shuffle

目录 RDD持久化 RDD 的数据是过程数据 RDD 缓存 RDD CheckPoint 共享变量 广播变量 累加器 Spark 内核调度 DAG DAG 的宽窄依赖和阶段划分 内存迭代计算 Spark是怎么做内存计算的? DAG的作用?Stage阶段划分的作用? Spark为什么比MapReduce快&#xff1f; Spar…

Akamai 如何揪出微软 RPC 服务中的漏洞

近日&#xff0c;Akamai研究人员在微软Windows RPC服务中发现了两个重要漏洞&#xff1a;严重程度分值为4.3的CVE-2022-38034&#xff0c;以及分值为8.8的CVE-2022-38045。这些漏洞可以利用设计上的瑕疵&#xff0c;通过缓存机制绕过MS-RPC安全回调。我们已经确认&#xff0c;所…

Golang 学习(一)基础知识

面向对象 Golang 也支持面向对象编程(OOP)&#xff0c;但是和传统的面向对象编程有区别&#xff0c;并不是纯粹的面向对象语言。 Golang 没有类(class)&#xff0c;Go 语言的结构体(struct)和其它编程语言的类(class)有同等的地位&#xff0c;Golang 是基于 struct 来实现 OOP…

爬虫工作量由小到大的思维转变---<第四十四章 Scrapyd 用gerapy管理多台机器爬虫>

前言: 之前讲过关于如何在gerapy中部署本地爬虫, 爬虫工作量由小到大的思维转变---&#xff1c;第三十四章 Scrapy 的部署scrapydGerapy&#xff1e;_gerapy如何登录-CSDN博客 爬虫工作量由小到大的思维转变---&#xff1c;第三十五章 Scrapy 的scrapydGerapy 部署爬虫项目&…

云计算市场分析

目录 一、云计算市场概述 1.1 概述 二、国外云计算厂商 2.1 亚马逊AWS 2.2 微软AzureAzure 2.3 Apple iCloud 三、国内云计算厂商 3.1 阿里云 3.2 腾讯云 3.3 华为云 3.4 百度智能云 一、云计算市场概述 1.1 概述 云计算从出现以来&#xff0c;其发展就非常迅速。以…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之QRCode组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之QRCode组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、QRCode组件 用于显示单个二维码的组件。 子组件 无。 接口 QRCode(value: st…

深入实战:ElasticSearch的Rest API与迭代器模式在高效查询中的应用

在我们公司&#xff0c;大多数Java开发工程师在项目中都有使用Elasticsearch的经验。通常&#xff0c;他们会通过引入第三方工具包或使用Elasticsearch Client等方式来进行数据查询。然而&#xff0c;当涉及到基于Elasticsearch Rest API的/_sql?formatjson接口时&#xff0c;…