了解http请求的小伙伴都知道,通过get方法请求的数据是在url中传递的,我们通过url.parse(request.url).query可以很轻松的从url中获取请求参数。但为了安全考虑更多的请求是用post的方式请求的,这个时候我们应该怎么获取呢,答案如下:
var http = require('http'); var querystring = require('querystring'); var util = require('util');
http.createServer(function (req, res) {
// 定义了一个post变量,用于暂存请求体的信息
var post = '';
// 通过req的data事件监听函数,每当接受到请求体的数据,就累加到post变量中
req.on('data', function (chunk) {
post += chunk;
});
// 在end事件触发后,通过querystring.parse将post解析为真正的POST请求格式,然后向客户端返回。
req.on('end', function () {
post = querystring.parse(post);
res.end(util.inspect(post));
});
}).listen(3000);
我们可以通过req.on在data时订阅回调函数,将req的请求参数赋值给一个变量。当req中请求变量传递完毕时,调用end,传入回调函数,就可以操作请求体中传递的数据了。那么问题又来了,为什么req可以监听on,end这些方法呢?这是因为request 对象是一个 Stream,所谓Stream,是一个抽象接口,Node 中有很多对象实现了这个接口。然后每个 Stream 对象都EventEmitter 的实例。他们都具有以下属性:
data - 当有数据可读时触发。
end - 没有更多的数据可读时触发。
error - 在接收和写入过程中发生错误时触发。
finish - 所有数据已被写入到底层系统时触发。
所以req上边就可以监听以上方法来实现对post请求参数的获取;
本文章参考、引用:www.runoob.com/nodejs/node…