Node中的http模塊詳解(客戶端)

上一篇說到了http模塊的服務器篇,在這個文章裏面我們討論一下http模塊的客戶端篇

1.http客戶端

http模塊提供了兩個函數http.requesthttp.get,功能是客戶端向服務器端發送請求。

1.1 http.request

http.request(options,callback)用於發起http請求,接收兩個參數,options是一個類似關聯數組的對象,裏面包含一些請求的參數,callback表示請求後的回調。options常用的參數如下:

名稱 含義
host 請求網站的域名或IP地址
port 請求網站的端口,默認是80
methods 請求方法,默認是GET
path 請求的相對於根的路徑,默認是”/”。QueryString含在其中,例如/search?query=helios
headers 一個關聯數組對象,爲請求頭的內容

還要注意一點http.ClientRequest對象由http.request()創建並返回,也就是說http.request返回一個http.ClientRequest的實例
下面來看一組本機客戶端發給本機服務器的程序

var http=require('http');
var querystring=require('querystring');
//啓動服務
http.createServer((req,res)=>{
    console.log("request already come");
    var post = "";
    req.on('data',(chunk)=>{
        post += chunk;
    });
    req.on('end',()=>{
        //querystring.parse  將字符串轉換爲json的格式
        post =  querystring.parse(post);
        console.log('complete complished');
        //返回請求者一個信息
        res.write(post.name);
        res.end();
    });
}).listen(3000);

//將一個對象轉換爲json的字符串
var contents  =  querystring.stringify({
    name:'helios',
    age:21,
    address:'changsha'
});
//聲明請求的參數 options
var options={
    host:'localhost',
    path:'/',
    port:3000,
    method:'POST',
    headers:{
        'Content-Type':'application/x-www-form-urlencoded',
        'Content-Length':contents.length
    }
};


//開始發送請求
var req  =  http.request(options,(res)=>{
    res.setEncoding('utf-8');
    res.on('data',(data)=>{
        console.log('return :');
        console.log(data);
    });

});

req.write(contents);
req.end();

1.2get方法

http模塊還提供了http.get(options,callback),用來更簡單的處理GET方式的請求,它是http.request的簡化版本,唯一的區別在於http.get自動將請求方法設爲GET請求,同時不需要手動調用req.end(); 
這個就好像jQuery中的$.ajax$.GET的區別。 
下面來看一下具體代碼:

var http=require('http');
var querystring=require('querystring');
var url = require('url');

http.createServer(()=>{
    console.log('request come');
    //將傳過來的URL轉變爲對象
    var params = url.parse(req.url,true);
    console.log('解析完成');
    //打印這個對象的字符串形式
    console.log(util.inspect(params));
    console.log('向客戶端返回');
    res.end(params.query.name);
}).listen(3000);
//客戶端請求
var request=http.get({
    host:'localhost',
    path:'/user?name=helios&age=22',
    port:3000},function(res){
    res.setEncoding('utf-8');
    res.on('data',function(data){
        console.log(' 服務端相應回來的數據爲:'+data);
    })
});

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章