node.js学习(5)——form提交数据(post)

上一节-node.js学习(4)— form提交数据(get)

上节我们讲解了form使用get传输数据的方式,这节我们讲post请求。
相比get请求,post请求有以下几个优点:

  1. get所发送的数据是 URL 的一部分,对所有人可见,post不会显示在url上,安全性好。
  2. get数据长度最大为2048个字符。post无限制。
  3. get发送的数据类型只允许 ASCII 字符。post无限制。

了解了其优点后,我们来进行post讲解。

1.post的分段传输

前面我们讲过,post由于可传输数据长度很大,所以当需要发送的数据过长时候,post会采用分段传输,这样可以避免发送一半出错,从而需要再次从头发送。我们通过下面例子证明下post的分段传输特性。


node.js学习(5)——form提交数据(post)_第1张图片
Jietu20180915-174627.jpg

我们在form.html增加下面代码:




    
    Document


    
账号: 密码: 备注:

form-post.js增加下面代码:

const http = require('http');
const fs=require('fs');
http.createServer(function (req, res) {
    //假设账号密码备注都输入为1
    let str='',i=0;  //str——用于保存提交的数据,初始化为空,  i——传送次数,用于计算传输的次数,初始化为0
    req.on('data',function(data){
        //每执行一次,对data进行拼接,i进行+1
        str+=data;
        console.log(`第二步${++i}`,data,data.toString());
         //1,,account=1&pass=1¬e=1
    })
    req.on('end',function(){
        const postData=querystring.parse(str);
        console.log('第三步end:',postData); //第三步end: { account: '1', pass: '1', note: '1' }
    })
    console.log('第一步');
    const path = `./www${req.url}`;
    fs.readFile(path, function (err, data) {
        console.log('第四步');
        if (err) {
            res.write('404')
        } else {
            res.write(data)
        }
        res.end()
    })
}).listen(1000)
  • req.on('data',fn)表示,数据传输过程中执行的函数。如果数据传输量很大,会执行很多次,数据量很小,只会执行一次。
  • req.on('end',fn)表示,数据全部到达执行的函数,只会执行一次。
  • 上面标注第几步表示代码的执行顺序。这里最好用火狐测试,因为谷歌/favicon.ico也会执行上面步骤,影响测试。
  • 因为传输数据很长的时候才会出现分段,所以我们可以在备注里面输入很多字符测试下,会发现第二步执行很多遍。这里假设三个框都输入为1为分段传输(实际这么短是不可能分段,只会执传输一次),可能第一次为account=1&pass=1&n,第二次为ote=1。
  • 我们在后台可以在end事件里面获取全部接收完的数据。然后通过前面所讲的querystring将查询字符串转化为json对象。

2.post不会在url后拼接字符串

这个很简单,直接放图。

node.js学习(5)——form提交数据(post)_第2张图片
post.gif

下一节-node.js学习(6)—ajax提交数据练习

你可能感兴趣的:(node.js学习(5)——form提交数据(post))