Node中的数据交互
2020-07-14 本文已影响0人
泡杯感冒灵
GET 请求,用来获取数据
- 数据放在URL里进行传输
- 容量 < 32K
看例子:我们先创建一个服务器,监听8888端口,并且打印请求地址
const http = require('http')
http.createServer((req,res) => {
console.log(req.url); // 要访问的链接
}).listen(8888)
然后我们创建一个表单,并向服务器提交表单数据
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>表单</title>
</head>
<body>
<form action="http://localhost:8888/aaa" method="GET">
用户名:<input type='text' name="username"><br>
密码:<input type='password' name="password">
<input type="submit" value="提交">
</form>
</body>
</html>
启动服务器后,打开页面,输入账号和密码,提交,就可以看到打印的数据


这个时候,我们可以清晰的看到请求的接口和后边携带的参数。通过split等方法,我们可以截取参数等数据。
当然了,我们还可以通过url
模块来做这些事情,url.parse()
可以将一个完整的URL地址,分为很多部分,常用的有:host、port、pathname、path、query。
const http = require('http')
const url = require('url')
http.createServer((req,res) => {
// console.log(req.url); // 要访问的链接
console.log(url.parse(req.url))
}).listen(8888)
下边就是我们通过url.parse解析的请求接口和参数数据

也可以给url.parse添加第二个参数true,
url.parse()第二个参数为true,query属性会生成一个对象,如果为false,则返回url对象上的query属性会是一个未解析,未解码的字符串,默认为false
const http = require('http')
const url = require('url')
http.createServer((req,res) => {
// console.log(req.url); // 要访问的链接
let {pathname,query} = url.parse(req.url,true)
console.log(pathname,query)
}).listen(8888)

POST请求
- 数据是放在body里传输的
- 容量大 <2G
GET请求时,携带的参数提交小,所以是一次性传给服务器的,而POST请求传输的数据可能比较大,所以是分段传输的,这个时候会触发data
事件。该事件的回调函数的参数是buffer
。当数据传输完后,会触发end
事件。
Buffers是代表原始数据堆的分配额的数据类型,可以将其视为是Javascript的另外一种数据类型(就像String和Number一样),在Node中以
类数组
的方式来使用。
var buf = new Buffer(255) buf[0] = 23
既然已经有了数组,为什么Node中还需要使用Buffer。这是因为Node作为服务器端的语言,需要处理视频,音频,图片等二进制文件,而Javascript本身对二进制的支持欠佳,数组对文件的支持类型有限,一般是一些简单的数据类型。因此Node中需要一种处理二进制的数据类型,这才有了Buffer。可以将Buffer看成特殊的数组,其存储的都是二进制数据(以两位16进制来表示)。下面就是一个典型的buffer数据,其内部由两位16进制组成。
<Buffer 6a 6f 68 6e 6e 79 3a 63 2d 62 61 64>
出处
const http = require('http')
const querystring = require('querystring')
http.createServer((req, res) => {
let result = []
req.on('data', buffer => {
result.push(buffer)
})
req.on('end', () => {
// Buffer.concat 返回一个连接了 list 中所有 Buffer 的新 Buffer
let data = Buffer.concat(result).toString()
// querystring.parse 将字符串转成对象。说白了其实就是把url上带的参数串转成数组对象
console.log(querystring.parse(data)) // { username: 'zhangsan', password: '888888' }
})
}).listen(8888)