由于在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