由於在post提交數據的時候,數據量可能會比較大,因此在獲取用戶的post提交數據時,是分屢次提交的。因此咱們應該將全部的數據收集完整,纔開始對數據進行操做。express
下面但願能收到一個對象,方法以下:npm
fs.readFile(path.join(__dirname,'data','data.json'),'utf8',function(err,data){ if(err&&err.code!=='ENOENT'){ throw err; } var list=JSON.parse(data||'[]'); //監聽reqyest的對象的時候 //聲明一個數組,用來保存用戶每次提交的數據 var array=[]; req.on('data',function(chunk){ //此處的chunk參數,就是瀏覽器本次提交過來的一部分數據 //chunk的數據類型是buffer array.push(chunk); }); });
注意:這裏接收是一段段的buffer類型的數據,將它們存儲在一個數組中。json
req.on('end',function(){ //這個事件中將array數組中的每一個buffer彙總起來成爲一個buffer,在將buffer轉化爲字符串 //而後字符串轉化爲json對象 //不能直接用JSON.parse,由於如今字符串是這樣的title=fff&url=ssss&text=isjsix var postBody=Buffer.concat(array); postBody=postBody.toString('utf8'); postBody=querystring.parse(postBody); //postBody是對象了
上面須要注意 postBody=postBody.toString('utf8');
後獲得的字符串不能經過JSON.parse直接轉化爲json,title=fff&url=ssss&text=isjsix
須要使用querystring.parse
才行,querystring.parse
能把一個 URL 查詢字符串(str)解析成一個鍵值對的集合。segmentfault
Express是基於NodeJs的Web框架,有不少中間件來處理某些響應以及給req,res添加了不少屬性和方法。在前面使用原生的req.on和req.end時,要寫很多代碼,比較麻煩。在Express中可使用body-parser中間件來簡化剛纔的過程。數組
npm install express body-parser
使用代碼:瀏覽器
const express = require("express"); const bodyParser = require("body-parser"); // 建立服務 const app = express(); // 使用 body-parser 中間 app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); // 建立路由 app.post("/login", function (req, res) { console.log(req.body); res.send(req.body); }); // 監聽服務 app.listen(3000, function () { console.log("server start 3000"); });
當post請求時,body-parser會將數據轉化爲對象掛在req.body
上,就不用咱們本身從buffer轉字符串,再轉對象了。app