//定义服务器响应状态码和内容解析格式,//两个参数,第一个状态码,第二个是对象,实际上存储的就是响应头里面的信息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请求与响应的处理相关推荐

  1. 网络基础知识学习笔记

    网络基础知识学习笔记 参考菜鸟教程.个人学习整理,仅供参考.三年前学过,三年没用忘了,重新学习整理一下. 文章目录 网络基础知识学习笔记 OSI七层网络模型 IP地址 子网掩码及网络划分 网络协议 A ...

  2. 100 个网络基础知识普及,看完成半个网络高手!(文末附PDF版本)

    点击上方"涛哥聊Python",选择"星标"公众号 重磅干货,第一时间送达 来源:CU技术社区 阅读文本大概需要 5 分钟 为了方便大家更好着按需查找对应知识点 ...

  3. linux基础-网络基础知识篇

    一.网络基础知识概念 1.什么是网络? 网络即为实现通讯的技术. 2.网络的诞生六步曲 (1).早期的网络需要拥有两台通讯的主机,当主机之间有通讯需求是就构建网络进行通讯 (2).当主机网络需要通讯时 ...

  4. 计算机二级二叉树基础知识,2017年计算机二级公共基础知识学习教程:树与二叉树...

    (六)树与二叉树 1.树的基本概念 树是一种简单的非线性结构.在树结构中,数据元素之间有着明显的层次结构.在树的图形表示中,用直线连接两端的结点,上端点为前件,下端点为后件. 在树结构中,每一个结点只 ...

  5. 收藏100个网络基础知识

    100 个网络基础知识普及,看完成半个网络高手! 1)什么是链接? 链接是指两个设备之间的连接.它包括用于一个设备能够与另一个设备通信的电缆类型和协议. 2)OSI 参考模型的层次是什么? 有 7 个 ...

  6. 第二十六期:100 个网络基础知识普及,看完成半个网络高手

    本篇文章是关于100个网络基础知识普及,看完成半个网络高手!下面,我们一起来看. 作者:佚名来源 本篇文章是关于100个网络基础知识普及,看完成半个网络高手!下面,我们一起来看. 1)什么是链接? 链 ...

  7. 网络基础知识 快速计算子网掩码的2种方法

    网络基础知识 快速计算子网掩码的2种方法<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office ...

  8. 计算机二级循环队列知识点,考点!计算机二级考试公共基础知识冲刺复习笔记:栈、队列和循环队列...

    小编所收集到的相关计算机二级考试公共基础知识冲刺复习笔记:栈.队列和循环队列的资料 大家要认真阅读哦! 1.栈(Stack)又称堆栈. (1)栈是一种运算受限的线性表,其限制是仅允许在表的一端进行插入 ...

  9. 计算机网络有哪些技能知识,网络基础知识及操作技能.ppt

    网络基础知识及操作技能 主讲人 李春报 一.计算机网络概述 1.计算机网络的概念 计算机网络是把分布在不同地理位置上的计算机.终端,用通信设备和通信线路连结起来,再配以相应的网络软件,从而使众多计算机 ...

  10. 华为HCNE专题一:网络基础知识

    华为HCNE专题一:网络基础知识 对应章节:第一章 重点:理解网络结构,掌握OSI参考模型的基本结构 难点:OSI各层次名字及其概念的理解 亮点/应用/重要性:网络入门的基础,重中之重. 主要内容:针 ...

最新文章

  1. cufflinks基于QuantFig绘制高级金融图
  2. hexo 搜索_Hexo--本地搜索localsearch之url路径问题
  3. (000) java后台开发之指导思想
  4. 计算机网络思科实验,思科综合实验
  5. 微信JS-SDK实现分享功能
  6. 前端学习(1679):前端系列实战课程之为蛇创建食物对象
  7. Linux idle基础
  8. idea插件Iedis 2安装与使用
  9. SQL中DB2数据库修改某字段长度或类型
  10. 回顾声智科技助力联想智能音箱MINI亮相CES Asia
  11. ARM体系结构的特点
  12. Style 的查找 FindResource
  13. ajax怎么在服务器返回值,node.js+Ajax实现获取HTTP服务器返回数据?
  14. python julia go_Python的四个挑战者:Swift、Go、Julia、R
  15. 【SpringBoot_ANNOTATIONS】组件注册 05 @Lazy 懒加载
  16. OPENWRT:编译E8820V2总结
  17. Ubuntu-区域截图
  18. safri手机页面调试
  19. 太空大战游戏开发实例
  20. 巴菲特致股东的一封信:2002年

热门文章

  1. 洛谷P1990 覆盖墙壁(递推)
  2. mysql 图文安装_mysql安装图解mysql图文安装教程(详细说明)
  3. 每个程序员应该知道12件事
  4. SQLite 之 C#版 System.Data.SQLite 使用
  5. js知识梳理1:理解对象的属性特性
  6. [工具] Seer 代码预览器
  7. 配置generatorConfig.xml自动生成的代码的sql书写问题
  8. 通过寄生组合式继承创建js的异常类
  9. Java NIO类库Selector机制解析(上)
  10. 查询工商单位注册信息 平台