美文网首页
Node中的数据交互

Node中的数据交互

作者: 泡杯感冒灵 | 来源:发表于2020-07-14 15:48 被阅读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请求

    • 数据是放在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)
    

    相关文章

      网友评论

          本文标题:Node中的数据交互

          本文链接:https://www.haomeiwen.com/subject/ujuacktx.html