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(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实现文件上传的功能,敬请关注!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示