JSONStream使用不同的解析器处理一个数据

时间:2014-05-08 15:52:05

标签: node.js jsonstream

我使用JSONStream来解析来自服务器的数据,数据可能像{"错误":" SomeError"}或{"文章&# 34;:[{" id":123}]};

我的代码就像

var request = require('request');
var JSONStream = require('JSONStream');

var articleIDParser = JSONStream.parse(['articles', true, 'id']);
var errorParser = JSONStream.parse(['error']);

request({url: 'http://XXX/articles.json'})
    .pipe(articleIDParser).pipe(errorParser);

errorParser.on('data', function(data) {
    console.log(data);
});

articleIDParser.on('data', someFuncHere);

但不幸的是,即使服务器返回错误,第二个解析器也不起作用。

管道功能或JSONStream我错了吗?

提前致谢。

2 个答案:

答案 0 :(得分:0)

Node.js中的解释Stream documentation

'end'事件的回调函数没有数据参数。请改为收听“数据”事件。如果管道侦听目的地的pipe事件。

var request, JSONStream, articleIDParser, errorParser;
request = require('request');
JSONStream = require('JSONStream');
articleIDParser = JSONStream.parse(['articles', true, 'id']);
errorParser = JSONStream.parse(['error']);

articleIDParser.on('pipe', function (src) {
    // some code
});
errorParser.on('pipe', function (src) {
    // some code
});
request({url: 'http://XXX/articles.json'}).pipe(articleIDParser).pipe(errorParser);

注意: JSONStream.getParserStream不那么模糊,当你刚刚获得解析器/可写流时,人们可能会认为你已经解析了。如果您仍有问题,请提供有关JSONStream的更多信息(代码)。顺便说一句,Stream模块仍然标记为不稳定。

答案 1 :(得分:0)

好吧,我使用以下方法解决了这个问题:

var request({url: 'http://XXX/articles.json'})
dest.pipe(articleIDParser)
dest.pipe(errorParser);