get請求的headers中沒有content-type這個字段,post 的 content-type 有兩種 :
- application/x-www-form-urlencoded
這種就是一般的文本表單用post傳地數據,只要將得到的data用querystring解析下就可以了 - multipart/form-data
文件表單的傳輸,也是本文介紹的重點
獲取POST數據
前面已經說過,post數據的傳輸是可能分包的,因此必然是異步的。post數據的接受過程如下:
exports.processClientInput=function(req,cb){
method = req.method.toLowerCase();
if(method==="post"){
var urlstr="";
var jsondata;
req.addListener("data",function(postdata){
urlstr+=postdata;
});
req.addListener("end",function(){
jsondata = querystring.parse(urlstr);
cb(null,jsondata);
});
}else if(method==="get"){
var jsonData=urlLib.parse(req.url,true).query;
cb(null,jsonData);
}
}
第二個if就是get數據的解析方式。
注意,對於非文件post數據,上面以字符串接收是沒問題的,但其實 postDataChunk 是一個 buffer 類型數據,在遇到二進制時,這樣的接受方式存在問題。
但是現在的這種post處理數據的方式是解析不了form表單提交的數據的。