Node中的数据交互

2020-07-14  本文已影响0人  泡杯感冒灵

GET 请求,用来获取数据

  1. 数据放在URL里进行传输
  2. 容量 < 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>

启动服务器后,打开页面,输入账号和密码,提交,就可以看到打印的数据


image.png
image.png

这个时候,我们可以清晰的看到请求的接口和后边携带的参数。通过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解析的请求接口和参数数据

image.png
也可以给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)
image.png

POST请求

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)
上一篇下一篇

猜你喜欢

热点阅读