Node js HTTP服务器请求体作为流可读



我正在使用node.js编写http服务器,并且很难将请求体隔离为流可读。下面是我的代码的一个基本示例:

var http = require('http')
  , fs = require('fs');
http.createServer(function(req, res) {
  if ( req.method.toLowerCase() == 'post') {
    req.pipe(fs.createWriteStream('out.txt'));
    req.on('end', function() {
      res.writeHead(200, {'content-type': 'text/plain'})
      res.write('Upload Complete!n');
      res.end();
    });
  }
}).listen(8182);
console.log('listening on port 8182');

根据node的文档,a请求参数是http的一个实例。IncomingObject实现了节点的可读流接口。正如我上面所做的那样,只使用stream.pipe()的问题是,可读流包括请求头的纯文本以及请求体。是否有一种方法可以仅将请求体隔离为可读流?

我知道有框架的文件上传,如可怕的。我的最终目标不是创建一个上传服务器,而是充当一个代理,并将请求体流式传输到另一个web服务。

thanks in advance.

编辑>>"Content-type: multipart/form-data"的工作服务器使用busboy

var http = require('http')
  , fs = require('fs')
  , Busboy = require('busboy');
http.createServer(function(req, res) {
  if ( req.method.toLowerCase() == 'post') {
    var busboy = new Busboy({headers: req.headers});
    busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
      file.pipe(fs.createWriteStream('out.txt'));
    });
    req.pipe(busboy);
    req.on('end', function() {
      res.writeHead(200, 'Content-type: text/plain');
      res.write('Upload Complete!n');
      res.end();
    });
  }
}).listen(8182);
console.log('listening on port 8182');

检查您的req.headers['content-type']。如果是multipart/form-data,那么你可以使用像busboy这样的模块来为你解析请求,并为文件部分提供可读流(如果存在,则为非文件部分提供纯字符串)。

如果内容类型是其他multipart/*类型,那么您可以使用dicer,这是busboy用于解析multipart的底层模块。

相关内容

  • 没有找到相关文章

最新更新