Node.js 获取post请求的数据

4,211 阅读1分钟

了解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…