NodeJS系列~第四個小例子,NodeJs處理Get請求和Post請求


返回目錄

說在前

對於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(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實現文件上傳的功能,敬請關注!

 返回目錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM