网络基础知识(黑马教程笔记)-4-http请求与响应的处理
//定义服务器响应状态码和内容解析格式,//两个参数,第一个状态码,第二个是对象,实际上存储的就是响应头里面的信息res.writeHead(200,{'content-type': 'text/html;charset=utf8',//以html格式解析响应内容,且编码格式为utf-8})
一,请求参数
二,get请求参数
以问号作为开始标志,以键值对方式存储,用&隔开。
那服务器端如何获取这些参数呢?
它要想能够获取,则客户端必然需要先传递。
而这个请求参数是在地址栏当中,也就是说,我们可以通过req.url取得!
在服务器的代码中添加:
console.log(req.url)
在地址栏中输入这个:http://localhost:3000/index?name=zhangsan&age=20
可以看到,req.url确实获取到了这个信息,但是问题是这个信息是字符串形式连接在一起的,为了好管理和访问,我们肯定是希望它能变成对象中的属性值,类似于下图这样:
{name:zhangsan,age:20
}
可喜的是,在node.js中提供了一个内置模块url来处理这一过程:
先在服务器代码中引入这个模块:
const url=require('url')
在url这个内置模块下,有一个方法:parse(解析)。
于是可以写代码:
console.log(req.url)console.log(url.parse(req.url))
它把我们想要的放置在对象内了 ,但这依旧不是我们想要的。
需要给这个parse方法,添加第二个参数:true,就是把查询的参数转化为我们想要的对象!
修改代码如下:
console.log(req.url)console.log(url.parse(req.url,true))
这个对象中的query属性,就是我们想要的对象,它存储着我们想要的信息。
由此,我们就可以通过访问对象的属性获取对应的参数了。
console.log(req.url)let params=url.parse(req.url,true).queryconsole.log(params.name)console.log(params.age)
又注意到,parse返回的对象中,对我们有用的其实就是这两个属性值:
所以可以用解构赋值的方式修改代码:
let {query,pathname}=url.parse(req.url,true)console.log(query.name)console.log(query.age)
这样就方便很多了。
因为此时的req.url包含了参数信息,所以不好用了,而此时的pathname就是正常的访问地址,所以可以用它:
let {query,pathname}=url.parse(req.url,true)console.log(query.name)console.log(query.age)//根据用户访问的地址不同,显示不同的界面// console.log(req.url)if (pathname == '/index' || pathname == '/'){res.end('<h3>我是成功请求之后的响应内容</h3>')}else if(pathname == '/list'){res.end('welcome to listpage')}else{res.end('not found')}
三,post请求参数
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title></head><body><form method="post" action="http://localhost:3000/"><input type="text" name="username"><input type="password" name="password"><input type="submit"></form></body>
</html>
Form Data 这一项,存储的就是post请求参数。
现在我们已经知道如何从客户端发送post请求到服务器端,那服务器端又如何接收这些参数呢?
const http=require('http')
const app=http.createServer()
app.on('request',(req,res)=>{//post参数是通过事件的方式接受的//data 当请求参数传递的时候触发data事件//end 当参数传递完成的时候触发end事件//事件绑定到req对象上面。//由于post参数很多,不是一次性就接收完的,所以需要生声明一个变量//当data事件触发之后,进行拼接。let postParams=''req.on('data',params=>{postParams += params})req.on('end',()=>{console.log(postParams)})res.end('OK')//对于客户端的每次请求,服务器端都要做出响应,否则客户端将处于等待状态//这里就意思性地进行响应一下。
})
app.listen(3000)
console.log("网站服务器启动成功")
另一个代码:
<form method="post" action="http://localhost:3000/"><input type="text" name="username"><input type="password" name="password"><input type="submit"></form>
编写服务器代码和页面代码如上,执行代码后如下:
也就是说,通过data和end事件,我们地服务器,已经收到了这个报文
并且取得了参数和值。但依旧是字符串混在一起的,同样,我们希望它们能够保存在一个对象中。
在node.js中给我们提供了另外一个内置模块,用来处理这样的参数字符串。
这个模块叫做querystring
需要在服务器代码中先引入这个内置模块对象。
const querystring=require('querystring')
在这个对象下,有一个同样名为parse的方法来处理这样的参数。
let postParams=''req.on('data',params=>{postParams += params})req.on('end',()=>{console.log(querystring.parse(postParams))})res.end('OK')
这样就也转化为对象的形式存储了。
网络基础知识(黑马教程笔记)-4-http请求与响应的处理相关推荐
- 网络基础知识学习笔记
网络基础知识学习笔记 参考菜鸟教程.个人学习整理,仅供参考.三年前学过,三年没用忘了,重新学习整理一下. 文章目录 网络基础知识学习笔记 OSI七层网络模型 IP地址 子网掩码及网络划分 网络协议 A ...
- 100 个网络基础知识普及,看完成半个网络高手!(文末附PDF版本)
点击上方"涛哥聊Python",选择"星标"公众号 重磅干货,第一时间送达 来源:CU技术社区 阅读文本大概需要 5 分钟 为了方便大家更好着按需查找对应知识点 ...
- linux基础-网络基础知识篇
一.网络基础知识概念 1.什么是网络? 网络即为实现通讯的技术. 2.网络的诞生六步曲 (1).早期的网络需要拥有两台通讯的主机,当主机之间有通讯需求是就构建网络进行通讯 (2).当主机网络需要通讯时 ...
- 计算机二级二叉树基础知识,2017年计算机二级公共基础知识学习教程:树与二叉树...
(六)树与二叉树 1.树的基本概念 树是一种简单的非线性结构.在树结构中,数据元素之间有着明显的层次结构.在树的图形表示中,用直线连接两端的结点,上端点为前件,下端点为后件. 在树结构中,每一个结点只 ...
- 收藏100个网络基础知识
100 个网络基础知识普及,看完成半个网络高手! 1)什么是链接? 链接是指两个设备之间的连接.它包括用于一个设备能够与另一个设备通信的电缆类型和协议. 2)OSI 参考模型的层次是什么? 有 7 个 ...
- 第二十六期:100 个网络基础知识普及,看完成半个网络高手
本篇文章是关于100个网络基础知识普及,看完成半个网络高手!下面,我们一起来看. 作者:佚名来源 本篇文章是关于100个网络基础知识普及,看完成半个网络高手!下面,我们一起来看. 1)什么是链接? 链 ...
- 网络基础知识 快速计算子网掩码的2种方法
网络基础知识 快速计算子网掩码的2种方法<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office ...
- 计算机二级循环队列知识点,考点!计算机二级考试公共基础知识冲刺复习笔记:栈、队列和循环队列...
小编所收集到的相关计算机二级考试公共基础知识冲刺复习笔记:栈.队列和循环队列的资料 大家要认真阅读哦! 1.栈(Stack)又称堆栈. (1)栈是一种运算受限的线性表,其限制是仅允许在表的一端进行插入 ...
- 计算机网络有哪些技能知识,网络基础知识及操作技能.ppt
网络基础知识及操作技能 主讲人 李春报 一.计算机网络概述 1.计算机网络的概念 计算机网络是把分布在不同地理位置上的计算机.终端,用通信设备和通信线路连结起来,再配以相应的网络软件,从而使众多计算机 ...
- 华为HCNE专题一:网络基础知识
华为HCNE专题一:网络基础知识 对应章节:第一章 重点:理解网络结构,掌握OSI参考模型的基本结构 难点:OSI各层次名字及其概念的理解 亮点/应用/重要性:网络入门的基础,重中之重. 主要内容:针 ...
最新文章
- cufflinks基于QuantFig绘制高级金融图
- hexo 搜索_Hexo--本地搜索localsearch之url路径问题
- (000) java后台开发之指导思想
- 计算机网络思科实验,思科综合实验
- 微信JS-SDK实现分享功能
- 前端学习(1679):前端系列实战课程之为蛇创建食物对象
- Linux idle基础
- idea插件Iedis 2安装与使用
- SQL中DB2数据库修改某字段长度或类型
- 回顾声智科技助力联想智能音箱MINI亮相CES Asia
- ARM体系结构的特点
- Style 的查找 FindResource
- ajax怎么在服务器返回值,node.js+Ajax实现获取HTTP服务器返回数据?
- python julia go_Python的四个挑战者:Swift、Go、Julia、R
- 【SpringBoot_ANNOTATIONS】组件注册 05 @Lazy 懒加载
- OPENWRT:编译E8820V2总结
- Ubuntu-区域截图
- safri手机页面调试
- 太空大战游戏开发实例
- 巴菲特致股东的一封信:2002年