【问题标题】:Basic test of JSONStream not workingJSONStream 的基本测试不起作用
【发布时间】:2013-10-26 07:29:05
【问题描述】:

我正在查看 node.js 中的 JSONStream,我正在尝试使用以下小应用程序来处理它:

var JSONStream = require('JSONStream');
var Stream = require('stream');

var s = new Stream();
s.pipe = function(dest) {
  dest.write('{"foo":1}');
  return dest;
};

var parser = JSONStream.parse(/foo/);
s.pipe(parser).pipe(process.stdout);

不幸的是,在命令行上运行时,它不会向控制台写入任何内容。我做错了什么?

【问题讨论】:

  • parser 是否也定义了 pipe() 函数?如果不是,return dest; 行可以改为return arguments.callee;,这样.pipe(process.stdout) 的链式调用就不会在parser 上调用。

标签: javascript node.js jsonstream


【解决方案1】:

如果你重写你的代码,它会起作用:

var JSONStream = require('JSONStream');
var Stream = require('stream');

var s = new Stream();
s.pipe = function(dest) {
  dest.write('{"foo":1}');
  return dest;
};

var parser = JSONStream.parse();
parser.on('data', function(obj) {
  console.log('obj', obj);
});
s.pipe(parser);

您无法将JSONStream.parse() 的输出通过管道传输到process.stdout 的原因是JSONStream 输出对象,而process.stdout 只接受字符串(可能还有缓冲区):

> process.stdout.write({ foo : 1 });
TypeError: invalid data
    at WriteStream.Socket.write (net.js:612:11)
    ...

【讨论】:

  • 这让我想起了为什么我更喜欢静态类型的语言...:/
  • @thecoop 这会给你一个类似的错误:process.stdin.pipe(JSONStream.parse()).pipe(process.stdout);。不完全知道为什么它没有在您的示例中生成。
猜你喜欢
  • 2014-09-06
  • 1970-01-01
  • 2018-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-30
相关资源
最近更新 更多