Node.js 获取post请求的数据

2022-10-19 13:37:47

了解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请求参数的获取;

本文章参考、引用:https://www.runoob.com/nodejs/nodejs-stream.html

  • 作者:宁逺
  • 原文链接:https://blog.csdn.net/adrain_l/article/details/93142597
    更新时间:2022-10-19 13:37:47