返回目录

说在前

对于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(, {
'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(, "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(, {
"Content-Type": "text/plain;charset=utf-8"
});
res.end("数据提交完毕");
});
}).listen(, "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();
}

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

aaarticlea/png;base64,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" alt="" />

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

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

返回目录

NodeJS系列~第四个小例子,NodeJs处理Get请求和Post请求的更多相关文章

  1. NodeJS系列~第三个小例子,NodeJs与Redis实现高并发的队列存储

    返回目录 众所周知 redis量个强大的缓存组件,可以部署在win32和linux环境之上,它有五大存储结构,其中有一种为列表list,它可以实现quene和stack的功能,即队列和堆栈的功能. r ...

  2. NodeJS系列~目录

    回到占占推荐博客索引 Node.js官网对它的阐述 Node.js is a platform built on Chrome's JavaScript runtime for easily buil ...

  3. [NodeJs系列][译]理解NodeJs中的Event Loop、Timers以及process.nextTick()

    译者注: 为什么要翻译?其实在翻译这篇文章前,笔者有Google了一下中文翻译,看的不是很明白,所以才有自己翻译的打算,当然能力有限,文中或有错漏,欢迎指正. 文末会有几个小问题,大家不妨一起思考一下 ...

  4. nodejs+koa+uniapp实现微信小程序登陆获取用户手机号及openId

    nodejs+koa+uniapp实现微信小程序登陆获取用户手机号及openId 前言: 我准备用nodejs+koa+uniapp实现一款餐饮点单小程序,以及nodejs+koa+vue实现后端管理 ...

  5. NodeJS系列-部署

    NodeJS系列-部署 NodeJS我就不介绍了,被标题吸引进来的人可以看这个链接,了解NodeJS.下来就开始关于NodeJS开发的指南. NodeJS可以部署的平台有Windows,Unix,iO ...

  6. c/c++ 模板与STL小例子系列<三> traits

    c/c++ 模板与STL小例子系列 traits 对这个概念,还是处于懵逼的状态,初步体会就是,为了解决类型之间的转换问题. 从一个类型为A的指针,转化到类型为B的指针,中间需要用void*来作为中介 ...

  7. c/c++ 模板与STL小例子系列<二> 模板类与友元函数

    c/c++ 模板与STL小例子系列 模板类与友元函数 比如某个类是个模板类D,有个需求是需要重载D的operator<<函数,这时就需要用到友元. 实现这样的友元需要3个必要步骤 1,在模 ...

  8. c/c++ 模板与STL小例子系列<一 >自建Array数组

    c/c++ 模板与STL小例子系列 自建Array数组 自建的Array数组,提供如下对外接口 方法 功能描述 Array() 无参数构造方法,构造元素个数为模板参数个的数组 Array(int le ...

  9. nodejs取参四种方法req.body,req.params,req.param,req.body

    摘要: nodejs取参四种方法req.body,req.params,req.param,req.body 获取请求很中的参数是每个web后台处理的必经之路,nodejs提供了四种方法来实现. 获取 ...

随机推荐

  1. 【转】简易smtp调用类

    用PHP发邮件的一个类,无需验证SMTP主机,类代码你可以不用管,只要按照后面的使用方法操作就行,这个类要先保存成一个php文件,文件名就叫smtp.php吧,下面是该文件代码: <?php c ...

  2. AngularJS 页面基本操作

    一.避免预先加载angular模板语法 <style> [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, ...

  3. UVa 11729

    http://vjudge.net/problem/UVA-11729 There is a war and it doesn't look very promising for your count ...

  4. JavaScript-navigator_userAgent-编写一段代码能够区分浏览器的主流和区分

    1 userAgent:包含浏览器名称和版本号的字符串 <!DOCTYPE html> <html> <head lang="en"> < ...

  5. VS2013正确设置DLL环境变量目录的方法

    VS有个比较迷惑人的选项,就是在工程>>属性中有个Executable Directories设置项, 几乎所有地球人都认为这个选项是设置exe可执行文件依赖的DLL目录用的,这无疑会方便 ...

  6. sqlserver 2008 数据库表结构脚本及数据导出

    sqlserver2008  在xp上尝试安装了 sqlserver2008 express版本,但是和公司的sqlserver2008 r2 版本不兼容.升级的时候,出了问题.所以换了中思路,将数据 ...

  7. VIM使用(二) 浏览内核源代码

    为了实现类似SourceInsight功能,通过VIM+Ctags+Cscope+Taglist+Source Explore +NERD Tree实现. 一, 安装插件 1)安装Ctags 和Csc ...

  8. Mac 识别NTFS移动硬盘

    下载工具 TUXERA NTFS 2014

  9. Cannot refer to an instance field pageTitle while explicitly invoking a cons

    当下面这样时在第7行会提示:Cannot refer to an instance field pageTitle while explicitly invoking a cons public cl ...

  10. Pip Permittion Issue on MacOS

    Question: OSError: [Errno 1] Operation not permitted: '/tmp/pip-W13DsU-uninstall/System/Library/Fram ...