【问题标题】:Fake a Node.js Readable file stream from a JavaScript object从 JavaScript 对象伪造 Node.js 可读文件流
【发布时间】:2017-11-30 06:46:55
【问题描述】:

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

所以它期待这样的代码

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

lib.addDocument(config, file),

我想从一个名为 payload 的对象创建一个假文件,然后发送它,到目前为止我最接近的尝试如下所示:

  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

【问题讨论】:

  • 预期的转化率是多少? JSON.stringify?

标签: javascript node.js stream


【解决方案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)

【讨论】:

  • 我的代码现在是: var Readable = require('stream').Readable var fake_file = new Readable fake_file.push(JSON.stringify(msg.payload)); fake_file.push(null);但我仍然收到“多部分数据意外结束”错误
  • 您使用的是什么版本的 Node? v10 中有一些 API 更改。您需要的基本上是从字符串创建可读流。找出你的节点版本并通过 JSON.stringify 传递你的对象以获得它的字符串表示
  • [info] Node.js 版本:v6.10.3 是的,我已经打开了文档,但我似乎无法找到正确的函数调用集
  • 更新了答案。发现这个答案很有帮助:stackoverflow.com/a/35607417/2649853
  • 试过了,没有错误,但调用库现在挂起。我不认为数据进入了假文件,当我 console.log 看到“长度:0”
【解决方案2】:

您的代码缺少 Object -> String 转换。可以为此使用 JSON.stringify:

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

【讨论】:

  • 但是库,期待一个 stream.Readable ,所以只传递一个字符串行不通吗?
  • @gwilym readFileSync 返回一个字符串(或缓冲区)。如果你的第一个代码是正确的,我的代码也可以工作......
  • 这让我很接近。我不得不强制 metadata: {"content-type":"application/json"} 让它工作,但现在我在库中遇到了一个错误,我认为“TypeError: source.on is not a function”
猜你喜欢
  • 2014-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-04
  • 1970-01-01
  • 2015-10-27
  • 1970-01-01
相关资源
最近更新 更多