zoukankan      html  css  js  c++  java
  • NodeJS系列~第四个小例子,NodeJs处理Get请求和Post请求

    返回目录

    说在前

    对于HTTP请求来说,我们通常使用的是Get和Post,除此之外还有put,delete等,而对于get来说,比较lightweight,只是对字符串的传输,它会被添加到URL地址里,属于URL的一部分,有时,我们为了安全和兼容性问题,URL地址上的参数会进行Url.Encode,有的浏览器已经带我们做了这些;而对于Post来说,就显得重了一些,它的数据以包的形式存在,除了可以有文本信息,还可以有二进制文件流信息,这讲里,我们主要说的是Post里的文本处理。

    做在后

    一  使用NodeJs实现对Get请求的处理,nodejs接入的形式为url?param1=zzl&param2=male

    var redis = require("redis");
    var http = require('http');
    var url = require("url");
    var info = "通过HTTPGet方式成功加入队列";
    http.createServer(function (req, res) {
        var params = url.parse(req.url, true).query;//解释url参数部分name=zzl&email=zzl@sina.com
        var client = redis.createClient();
        client.lpush("topnews", params.info);
        res.writeHead(200, {
            'Content-Type': 'text/plain;charset=utf-8'
        });
        client.lpop("topnews", function (i, o) {
            console.log(o);//回调,所以info可能没法得到o的值,就被res.write输出了
        })
        client.quit();
        res.write(info);
        res.end();
    }).listen(8000, "127.0.0.1");
    console.log('Server running at http://127.0.0.1:8000/');

    测试:http://127.0.0.1:8000?info=zzl

    二  使用NodeJs实现对Post请求的处理,nodejs接入的形式为{param1="zzl",param2="male"}

    Post由于它的重量,所以不可能说接收就接收,它会存储接入中和接入完成两种状态,两种状态对应着回调方法,即,当然数据处于接入中状态时,处理一种流程;当数据接入完成后,处理另一种流程。

    //接入中 
     req.addListener("data", function (postDataChunk) {});
    //接收完成
     req.addListener("end", function () {});

    下面看一下完成的代码:

    var redis = require('redis');
    var http = require('http');
    var url = require("url");
    var querystring = require("querystring");
    http.createServer(function (req, res) {
        // 设置接收数据编码格式为 UTF-8
        req.setEncoding('utf-8');
        var postData = ""; //POST & GET : name=zzl&email=zzl@sina.com
        // 数据块接收中
        req.addListener("data", function (postDataChunk) {
            postData += postDataChunk;
        });
        // 数据接收完毕,执行回调函数
        req.addListener("end", function () {
            console.log('数据接收完毕');
            var params = querystring.parse(postData);//GET & POST  ////解释表单数据部分{name="zzl",email="zzl@sina.com"}
            console.log(params);
            console.log(params["name"]);
            PushToRedis(params["name"]);
            res.writeHead(500, {
                "Content-Type": "text/plain;charset=utf-8"
            });
            res.end("数据提交完毕");
        });
    }).listen(8000, "127.0.0.1");
    console.log('Server running at http://127.0.0.1:8000/');
    
    //表单接收完成后,再处理redis部分
    function PushToRedis(info) {
        var client = redis.createClient();
        client.lpush("topnews", info);
        console.log("PushToRedis:" + info);
        client.lpop("topnews", function (i, o) {
            console.log(o);//回调,所以info可能没法得到o的值,就被res.write输出了
        })
        client.quit();
    }

    下面看一下结果,我把它截了图:

    实事上,对于post到nodeJS再由nodeJS到redis,这个case我们经常会看到,它实现起来比IIS,apache在性能上要高很多,它没有为每个连接建立线程,它解决了IO阻塞等等,OK,说到这里,我再强调一个nodeJS用到的最重要的场合:逻辑简单的高并发场合!

    下一次,我将为大家带来NodeJS实现文件上传的功能,敬请关注!

     返回目录

  • 相关阅读:
    Jmeter中ftp测试下载默认路径及文件
    python中http请求方法库汇总
    快速解决mysql Lost connection to MySQL server at 'reading initial communication packet及can't connect to mysql server on 'localhost'
    Python GUI--Tkinter实践
    Shell脚步之监控iostat数据
    C++二进制字符串转十六进制字符串 十六进制字符串转二进制字符串
    C++调用openssl实现DES加密解密cbc模式 zeropadding填充方式 pkcs5padding填充方式 pkcs7padding填充方式
    DES加解密 cbc模式 的简单讲解 && C++用openssl库来实现的注意事项
    C++ 使用openssl库实现 DES 加密——CBC模式 && RSA加密——公加私解——私加公解
    C++ 解析json串
  • 原文地址:https://www.cnblogs.com/lori/p/3437562.html
Copyright © 2011-2022 走看看