上一篇說到了http模塊的服務器篇,在這個文章裏面咱們討論一下http模塊的客戶端篇javascript
http模塊提供了兩個函數http.request
和http.get
,功能是客戶端向服務器端發送請求。java
http.request(options,callback)用於發起http請求,接收兩個參數,options
是一個相似關聯數組的對象,裏面包含一些請求的參數,callback
表示請求後的回調。options
經常使用的參數以下:ios
名稱 | 含義 |
host | 請求網站的域名或IP地址 |
port | 請求網站的端口,默認是80 |
methods | 請求方法,默認是GET |
path | 請求的相對於根的路徑,默認是」/」。QueryString含在其中,例如/search?query=helios |
headers | 一個關聯數組對象,爲請求頭的內容 |
還要注意一點http.ClientRequest對象由http.request()建立並返回,也就是說http.request返回一個http.ClientRequest的實例
下面來看一組本機客戶端發給本機服務器的程序ajax
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();
http模塊還提供了http.get(options,callback)
,用來更簡單的處理GET
方式的請求,它是http.request
的簡化版本,惟一的區別在於http.get自動將請求方法設爲GET請求,同時不須要手動調用req.end();
這個就好像jQuery
中的$.ajax
和$.GET
的區別。
下面來看一下具體代碼:json
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); }) });