伪造一个Node.js来自JavaScript对象的可读文件流

时间:2017-06-27 09:17:00

标签: javascript node.js stream

我想从javascript对象创建一个“假文件”,因为我正在使用的libarry期望一个文件作为输入,但我在内存中有一个对象。

所以它期待像这样的代码

var file = fs.readFileSync('{/path/to/file}');

lib.addDocument(config, file),

我想从我称之为有效负载的对象创建一个假文件,然后发送它,到目前为止我最接近的尝试是这样的:

  var fake_file = new stream.Readable({ objectMode: true });
  fake_file.push(msg.payload);
  fake_file.push(null);
  lib.addDocument(config, fake_file),

我觉得我很亲密,但我不能让它发挥作用。当前错误是

{ Error: Unexpected end of multipart data

2 个答案:

答案 0 :(得分:1)

var Readable = require('stream').Readable
var obj = { objectMode : true};

var rStream = new Readable
rStream.push(JSON.stringify(obj));
rStream.push(null);    //EOF
lib.addDocument(config, rStream)

对于低于v10及更高版本v4的旧版本:

var Readable = require('stream').Readable
var obj = { objectMode : true};
var chars=JSON.stringify(obj).split('');
function read(n){this.push(chars.shift())}
var rStream = new Readable({read:read});
lib.addDocument(config, rStream)

答案 1 :(得分:0)

您的代码缺少对象 - >字符串转换。可以使用JSON.stringify:

lib.addDocument(config, JSON.stringify(msg.payload));