我有以下示例代码。
var getPostedData = function (request) {
var qs = require('querystring');
var body = '';
request.on('data', function(chunk) {
body += chunk.toString();
});
return qs.parse(body);
};
getPostedData();
但是连接请求数据以流或多个数据包的形式出现。它不能像节点 v0.12 中的上述代码一样返回。示例代码将与节点 v0.10 一起使用。
多个数据包的一个解决方案是在请求对象上侦听end
事件发射。
var getPostedData = function (request) {
var qs = require('querystring');
var body = '';
request.on('data', function(chunk) {
body += chunk.toString();
}).on('end', function() {
//Here body will have multiple data packets
//return qs.parse(body);
});
return qs.parse(body);
};
getPostedData();
但是由于异步性,我们无法获得返回值。 如何在函数/方法中返回完整的多个数据块?
答案 0 :(得分:1)
您只需添加一个回调函数即可知道在异步中完成作业的时间。
var getPostedData = function (request, callback) {
var qs = require('querystring');
var body = '';
request.on('data', function(chunk) {
body += chunk.toString();
}).on('end', function() {
callback(null, qs.parse(body));
}).on('error' function(err){
callback(err);
});
};
router.post("/example", function(req, res, next){
getPostedData(req, function(err, body){
if(err) return next(err);
req.body = body;
next();
});
}, function(req, res){
console.log(req.body);
// Do you favor
});
在那里,我将getPostData
功能用作/example
路由器上的中间件。