返回目录

说在前

对于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. hdoj 2034 人见人爱A-B

    Problem Description 参加过上个月月赛的同学一定还记得其中的一个最简单的题目,就是{A}+{B},那个题目求的是两个集合的并集,今天我们这个A-B求的是两个集合的差,就是做集合的减法 ...

  2. Good-Bye

    嘛……以一种奇怪的姿势滚粗了…… 如果这个Blog能给未来的OIer们一些帮助的话,它也不枉存在了…… 我的OI之路也能以另一种形式延续下去吧…… 也许能搞ACM的话会再开?…… 不管怎么说,各位再见 ...

  3. Python 7 —— 扩展与嵌入

    Python 7 —— 扩展与嵌入 所谓扩展是指,在Python当中调用其他语言,由于Python的问题主要是效率,这里的扩展主要是指扩展C C++程序(重点) 所谓嵌入是指,在其他语言当中可以调用P ...

  4. 使用sklearn优雅地进行数据挖掘

    目录 1 使用sklearn进行数据挖掘 1.1 数据挖掘的步骤 1.2 数据初貌 1.3 关键技术2 并行处理 2.1 整体并行处理 2.2 部分并行处理3 流水线处理4 自动化调参5 持久化6 回 ...

  5. Windows 商店应用中使用 Office 365 API Tools

    本篇我们介绍一个API 工具,用于在 Windows Store App 中使用 Office 365 API. 首先来说一下本文的背景: 使用 SharePoint 做过开发的同学们应该都知道,Sh ...

  6. Windows Phone 8.1 新特性 - 控件之列表选择控件

    本篇我们来介绍Windows Phone 8.1 新特性中的列表选择控件. 在Windows Phone 8 时代,大家都会使用 LongListSelector 来实现列表选择控件,对数据进行分组显 ...

  7. 一致性Hash算法

    from wikipedia 一致哈希 历史 1997年由MIT的Karger等在一篇学术论文中提出如何将“一致性Hash”应用于用户易变的分布式Web服务中.也可用于实现健壮缓存来减少大型Web应用 ...

  8. linux下配置ssledge代理服务器

    ssl edge 是一个非常好用的VPN/proxy, 比云梯 稳定快速的多.  在LINUX下开发 Titanium 需要用到各种FQ,所以它是必备工具. 1. 根据自己付费后的用户名和密码,下载 ...

  9. Select loop

    The Bash Shell also offer select Loop, the syntax is: select varName in list do command1 command2 .. ...

  10. android 连接蓝牙扫码枪,程序崩溃之onConfigurationChanged

    当android手机通过蓝牙连接扫码枪时,程序崩溃的原因之一是:键盘弹出或隐藏,触发程序走了onDestory->onCreate的生命周期,从而可能使得页面的某些初始化数据被清除了. 解决方法 ...