NodeJS系列~第四个小例子,NodeJs处理Get请求和Post请求
说在前
对于HTTP请求来说,我们通常使用的是Get和Post,除此之外还有put,delete等,而对于get来说,比较lightweight,只是对字符串的传输,它会被添加到URL地址里,属于URL的一部分,有时,我们为了安全和兼容性问题,URL地址上的参数会进行Url.Encode,有的浏览器已经带我们做了这些;而对于Post来说,就显得重了一些,它的数据以包的形式存在,除了可以有文本信息,还可以有二进制文件流信息,这讲里,我们主要说的是Post里的文本处理。
做在后
一 使用NodeJs实现对Get请求的处理,nodejs接入的形式为url?param1=zzl¶m2=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请求的更多相关文章
- NodeJS系列~第三个小例子,NodeJs与Redis实现高并发的队列存储
返回目录 众所周知 redis量个强大的缓存组件,可以部署在win32和linux环境之上,它有五大存储结构,其中有一种为列表list,它可以实现quene和stack的功能,即队列和堆栈的功能. r ...
- NodeJS系列~目录
回到占占推荐博客索引 Node.js官网对它的阐述 Node.js is a platform built on Chrome's JavaScript runtime for easily buil ...
- [NodeJs系列][译]理解NodeJs中的Event Loop、Timers以及process.nextTick()
译者注: 为什么要翻译?其实在翻译这篇文章前,笔者有Google了一下中文翻译,看的不是很明白,所以才有自己翻译的打算,当然能力有限,文中或有错漏,欢迎指正. 文末会有几个小问题,大家不妨一起思考一下 ...
- nodejs+koa+uniapp实现微信小程序登陆获取用户手机号及openId
nodejs+koa+uniapp实现微信小程序登陆获取用户手机号及openId 前言: 我准备用nodejs+koa+uniapp实现一款餐饮点单小程序,以及nodejs+koa+vue实现后端管理 ...
- NodeJS系列-部署
NodeJS系列-部署 NodeJS我就不介绍了,被标题吸引进来的人可以看这个链接,了解NodeJS.下来就开始关于NodeJS开发的指南. NodeJS可以部署的平台有Windows,Unix,iO ...
- c/c++ 模板与STL小例子系列<三> traits
c/c++ 模板与STL小例子系列 traits 对这个概念,还是处于懵逼的状态,初步体会就是,为了解决类型之间的转换问题. 从一个类型为A的指针,转化到类型为B的指针,中间需要用void*来作为中介 ...
- c/c++ 模板与STL小例子系列<二> 模板类与友元函数
c/c++ 模板与STL小例子系列 模板类与友元函数 比如某个类是个模板类D,有个需求是需要重载D的operator<<函数,这时就需要用到友元. 实现这样的友元需要3个必要步骤 1,在模 ...
- c/c++ 模板与STL小例子系列<一 >自建Array数组
c/c++ 模板与STL小例子系列 自建Array数组 自建的Array数组,提供如下对外接口 方法 功能描述 Array() 无参数构造方法,构造元素个数为模板参数个的数组 Array(int le ...
- nodejs取参四种方法req.body,req.params,req.param,req.body
摘要: nodejs取参四种方法req.body,req.params,req.param,req.body 获取请求很中的参数是每个web后台处理的必经之路,nodejs提供了四种方法来实现. 获取 ...
随机推荐
- lambda 表达式 比较时间大小
data.Orderdetails.Where(r => r.orderstatus == id && DateTime.Compare((DateTime)r.OrderTim ...
- css大小单位px em rem的转换和详解
css大小单位px em rem的转换和详解 PX特点1. IE无法调整那些使用px作为单位的字体大小:2. 国外的大部分网站能够调整的原因在于其使用了em或rem作为字体单位:3. Firefox能 ...
- PHP对redis操作详解【转】
/*1.Connection*/ $redis = new Redis(); $redis->connect('127.0.0.1',6379,1);//短链接,本地host,端口为6379,超 ...
- HDU 1575
Tr A Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- SAS提供的机器学习算法
SAS graphical user interfaces help you build machine-learning models and implement an iterative mach ...
- 更改Xampp-sql的默认密码-配置appche运行环境
用php编写的web应用程序,需运行在php的web容器中,其中apache server是一个针对php web容器,它是apache下的开源项目.通常要运行一个web程序,我们还需要安装数据库软件 ...
- Beta版本的贡献率百分比
我真的是服了..刚刚写完最后一次作业,还感叹了一下终于完成了最后的工作,一看群还得发一篇. 贡献率这种东西不是应该默认是100%除以团队人数的吗,有没有搞错啊,这样很容易引起团队不融洽的啊. 0313 ...
- 浅谈产品测试人员的KPI
浅谈产品测 ...
- Software Testing hw2
Fault的定义:可能导致系统或功能失效的异常条件(Abnormal condition that can cause an element or an item tofail.),可译为“故障”. ...
- PAT/查找元素习题集
B1004. 成绩排名 (20) Description: 读入n名学生的姓名.学号.成绩,分别输出成绩最高和成绩最低学生的姓名和学号. Input: 每个测试输入包含1个测试用例,格式为: 第1行: ...