中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

NodeJS系列~第四個(ge)小例子(zi),NodeJs處理Get請(qing)求和Post請(qing)求

返回目錄

說在前

對(dui)于HTTP請求來說(shuo)(shuo),我(wo)(wo)們通常使用的(de)(de)是Get和Post,除(chu)(chu)此之(zhi)外(wai)還有put,delete等,而對(dui)于get來說(shuo)(shuo),比較lightweight,只是對(dui)字(zi)符串(chuan)的(de)(de)傳(chuan)輸,它會被添加(jia)到URL地(di)址里(li)(li),屬于URL的(de)(de)一部(bu)分,有時(shi),我(wo)(wo)們為(wei)了(le)安全和兼容性問題,URL地(di)址上的(de)(de)參(can)數會進行Url.Encode,有的(de)(de)瀏覽器已經(jing)帶我(wo)(wo)們做了(le)這些;而對(dui)于Post來說(shuo)(shuo),就(jiu)顯得重了(le)一些,它的(de)(de)數據以包的(de)(de)形式存在(zai),除(chu)(chu)了(le)可以有文(wen)本信息,還可以有二進制(zhi)文(wen)件(jian)流信息,這講(jiang)里(li)(li),我(wo)(wo)們主要說(shuo)(shuo)的(de)(de)是Post里(li)(li)的(de)(de)文(wen)本處理。

做在后

一  使用NodeJs實現對Get請求的(de)(de)處理,nodejs接入的(de)(de)形(xing)式為url?param1=zzl&param2=male

var redis = require("redis");
var http = require('http');
var url = require("url");
var info = "通過HTTPGet方式(shi)成功加入隊列";
http.createServer(function (req, res) {
    var params = url.parse(req.url, true).query;//解釋url參數部分(fen)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);//回(hui)調,所(suo)以info可能沒法得(de)到o的(de)值,就被res.write輸出(chu)了(le)
    })
    client.quit();
    res.write(info);
    res.end();
}).listen(8000, "127.0.0.1");
console.log('Server running at //127.0.0.1:8000/');

測試://127.0.0.1:8000?info=zzl

二  使用NodeJs實現(xian)對Post請求(qiu)的(de)處理(li),nodejs接入的(de)形式為{param1="zzl",param2="male"}

Post由于它的重量,所以不可能說接收就接收,它會存儲接入中和接入完成兩種狀態,兩種狀態對應著回調方法,即,當然數據處(chu)于接入中狀態時,處(chu)理一(yi)種流(liu)(liu)程(cheng);當數據接入完成(cheng)后,處(chu)理另一(yi)種流(liu)(liu)程(cheng)。

//接入中 
 req.addListener("data", function (postDataChunk) {});
//接(jie)收完成(cheng)
 req.addListener("end", function () {});

下(xia)面看一下(xia)完成的代碼:

var redis = require('redis');
var http = require('http');
var url = require("url");
var querystring = require("querystring");
http.createServer(function (req, res) {
    // 設置接收數據編碼格式(shi)為 UTF-8
    req.setEncoding('utf-8');
    var postData = ""; //POST & GET : name=zzl&email=zzl@sina.com
    // 數據塊(kuai)接收中
    req.addListener("data", function (postDataChunk) {
        postData += postDataChunk;
    });
    // 數(shu)據接(jie)收完畢,執(zhi)行回調函數(shu)
    req.addListener("end", function () {
        console.log('數(shu)據接收完畢');
        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("數(shu)據提交完畢");
    });
}).listen(8000, "127.0.0.1");
console.log('Server running at //127.0.0.1:8000/');

//表單接(jie)收完(wan)成后,再處(chu)理redis部(bu)分
function PushToRedis(info) {
    var client = redis.createClient();
    client.lpush("topnews", info);
    console.log("PushToRedis:" + info);
    client.lpop("topnews", function (i, o) {
        console.log(o);//回(hui)調,所(suo)以info可能沒法(fa)得到(dao)o的值,就被res.write輸(shu)出了
    })
    client.quit();
}

下面看(kan)一下結果,我把它截(jie)了圖:

實事上,對于post到nodeJS再由nodeJS到redis,這個case我們經常會看到,它實現起來比IIS,apache在性能上要高很多,它沒有為每個連接建立線程,它解決了IO阻塞等等,OK,說到這里,我再強調一個nodeJS用到的最重要的場合:邏輯(ji)簡單的高并發場合!

下一次,我將為大家(jia)帶來NodeJS實現文件上(shang)傳(chuan)的功能(neng),敬請關注!

 返回目錄

posted @ 2013-11-22 14:52  張占嶺  閱讀(42515)  評論(2)    收藏  舉報