Skip to content

接收POST数据 #122

Open
Open
@wuxianqiang

Description

@wuxianqiang

如果请求中还带有内容部分(如 POST 请求,它具有报头和内容),内容部分需要用户自行接收和解析。通过报头的Transfer-EncodingContent-Length 即可判断请求中是否带有内容,如下所示:

var hasBody = function (req) {
  return 'transfer-encoding' in req.headers || 'content-length' in req.headers;
};

在HTTP模块解析报头结束后,报文内容部分会通过 data 事件触发,我们只需以流的方式处理即可,如下所示:

function handle(req, res) {
  if (hasBody(req)) {
    var buffers = [];
    req.on('data', function (chunk) {
      buffers.push(chunk);
    });
    req.on('end', function () {
      req.rawBody= Buffer.concat(buffers).toString();
    });
  }
}

将接收到的Buffer列表转化为一个Buffer对象后,再转换为没有乱码的字符串,暂时挂置在req.rawBody 处。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions