zoukankan      html  css  js  c++  java
  • nodeJS入门04-post请求

    post请求

    POST 请求的内容全部的都在请求体中,http.ServerRequest 并没有一个属性内容为请求体,原因是等待请求体传输可能是一件耗时的工作。

    比如上传文件,而很多时候我们可能并不需要理会请求体的内容,恶意的POST请求会大大消耗服务器的资源,所以 node.js 默认是不会解析请求体的,当你需要的时候,需要手动来做。

    一个post请求的小实例:(代码地址:https://github.com/xuxiaozhi/nodeJS-tutorial.git

    前端代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <form action="http://127.0.0.1:8080/dopost" method="post">
        <p>姓名:<input type="text" name="name"></p>
        <p>年龄:<input type="text" name="age"></p>
        <p><input type="submit" value="提交"></p>
    </form>
    </body>
    </html>

    服务端代码:

    var http=require("http");
    var queryString=require("querystring");
    var server=http.createServer(function (req,res) {
        if(req.url=="/dopost"&&req.method.toLocaleLowerCase()=="post"){
    
            // 定义了一个post变量,用于暂存请求体的信息
            var allData="";
    
            //通过req的data事件监听函数,每当接受到请求体的数据,就累加到post变量中
            req.addListener("data",function (chunk) {
                allData+=chunk;
            })
    
            //在end事件触发后,通过querystring.parse将post解析为真正的POST请求格式,然后向客户端返回。
            req.addListener("end",function () {
                var dataString=allData.toString();
                var dataObj=queryString.parse(dataString);
                res.writeHead(200,{"Content-Type":"text/html;charset=UTF8"})
                res.write(dataObj.name+"的年龄是:"+dataObj.age);
                res.end();
            })
        }
    })
    
    server.listen(8080,"127.0.0.1");

    运行结果:

    原生写POST处理,比较复杂,要写两个监听。文件上传业务比较难写。所以,我们用到第三方模块。formidable。

    api地址:https://www.npmjs.com/package/formidable

     因为这个是一个第三方的模块,所以我们在使用到这个模块的时候需要先安装这个模块 :安装这个模块用的是npm install formidable命令

    cmd命令:

     安装好之后,我们在我们的项目里面,会看到一个node_modules文件夹,下载的模块就在这个文件夹中,如下:

     

     上面的例子用formidable来监听提交数据

    var http=require("http");
    var queryString=require("querystring");
    var formidable=require("formidable");
    var server=http.createServer(function (req,res) {
        if(req.url=="/dopost"&&req.method.toLocaleLowerCase()=="post"){
            // parse a file upload
            var form = new formidable.IncomingForm();
             //执行里面的回调函数的时候,表单已经全部接收完毕了
            //所有的文本域,单选框,都在fields存放
            //所有的文件域,files
            form.parse(req, function(err, fields, files) {
                console.log(fields);
                console.log(files);
                res.writeHead(200, {'content-type': 'text/plain'});
                res.end();
            });
    
            return;
        }
    })
    
    server.listen(8080,"127.0.0.1");
  • 相关阅读:
    WHERE col1=val1 AND col2=val2;index exists on col1 and col2, the appropriate rows can be fetched directly
    MySQL 交集 实现方法
    MBProgressHUD的使用
    Xcode4 使用 Organizer 分析 Crash logs(转)
    SimpleXML 使用详细例子
    PHP的XML Parser(转)
    iPhone,iPhone4,iPad程序启动画面的总结 (转)
    Pop3得到的Email 信件格式介绍
    yii总结
    隐藏Tabbar的一些方法
  • 原文地址:https://www.cnblogs.com/xuxiaozhi/p/7928524.html
Copyright © 2011-2022 走看看