cc.
cc.
侠客
侠客
  • 最后登录2018-08-27
  • 发帖数15
阅读:9336回复:2

NodeJs处理Get请求和Post请求

楼主#
更多 发布于:2017-05-11 09:20
对于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用到的最重要的场合:逻辑简单的高并发场合!

原帖地址:http://blog.csdn.net/lansetiankong12/article/details/50069719

最新喜欢:

tianlongwei4tianlo...
cc.
cc.
侠客
侠客
  • 最后登录2018-08-27
  • 发帖数15
沙发#
发布于:2017-05-12 00:38
doubleyong:这个例子使用到了redis,关于redis的介绍如下:Redis是一个超精简的基于内存的键值对数据库(key-value),一般对并发有一定要求的应用都用其储存session,乃至整个数据库。不过它公自带一个最小化的命令行式的数据库管理工具...回到原帖
谢谢老大的补充
doubleyong
管理员
管理员
  • 最后登录2025-12-02
  • 发帖数1198
  • 最爱沙发
  • 喜欢达人
  • 原创写手
  • 社区居民
  • 忠实会员
板凳#
发布于:2017-05-11 23:01
这个例子使用到了redis,关于redis的介绍如下:Redis是一个超精简的基于内存的键值对数据库(key-value),一般对并发有一定要求的应用都用其储存session,乃至整个数据库。不过它公自带一个最小化的命令行式的数据库管理工具,有时侯使用起来并不方便。不过Github上面已经有了很多图形化的管理工具,而且都针对REDIS做了一些优化,如自动折叠带schema的key等



推荐:http://www.cnblogs.com/gamedaybyday/p/6637933.html 可能要好理解点
知识需要管理,知识需要分享
游客


返回顶部

公众号

公众号