http post方法请求

http的请求,常见的分为GET和POST方法请求。GET方法请求,和得到请求的数据在昨天都介绍完了。相对比较简单,通过前两天的开发,我们让stuwebfk框架具有了req.params和req.query属性,其中req.query可以得到http get的请求参数。

http get方法请求有个限制,是2048个字符,也就是无法传递大数据量的请求参数。可以使用post方法请求来突破这个限制,但通过这个方法请求,我们就不能通过 req.query 得到post方法的请求参数了。

下面先做个表单,表单的method=post,然后发送表达信息。在服务器端,让程序读取数据。

测试表单

<!doctype html>
<html>
    <body>
        <form action="http://localhost:3000/post" method="post">
            <input type="text" name="name"/>
            <input type="text" name="age"/>
            <input type="submit"/>
        </form>
    </body>
</html>

然后我们写一段服务器端的代码,如下:

var App = require("../..").App,
    app = new App;

    app.post("/post",function(req,res){
        var body_data = “”;
        req.on("data",function(chunk){
            body_data += chunk;
        });
        req.on("end",function(){
            console.log(body_data.toString());
        })
    })

    app.listen(3000);

这段代码中,我们建立一个body_data,用来储存post方法请求的body体数据,通过监听req.on(“data”,回调函数) ,可以得到体数据,回调函数可能会被调用多次,因为数据可能会很大,所以每一次得到的chunk块数据 都被累加到 body_data 中,当req.on("end",回调函数) 的回调函数被调用时,就表示已读取完毕了。这时的body_data就是完整的body体数据了。

表单输入,然后提交。

 

在后台打印出:

name=leo&age=30

我们兴奋的发现,post方法请求,得到的数据和GET的一致,虽然获取方式不同,GET的是通过url解析出请求数据,而POST是通过读取body体数据 获得。

很好!弄明白这点之后,下一节就可以着手开发post.js中间件了。