网络基础知识(黑马教程笔记)-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).query
	console.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')

在这里插入图片描述
这样就也转化为对象的形式存储了。
在这里插入图片描述

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值