0

我正在使用 JSONStream 解析来自服务器的数据,数据可以像 {"error": "SomeError"} 或 {"articles":[{"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 上错了吗?

提前致谢。

4

2 回答 2

0

Node.js Stream 文档中的解释。

'end' 事件的回调函数没有数据参数。改为监听“数据”事件。在管道的情况下,监听目标上的管道事件。

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 模块仍然被标记为不稳定。

于 2014-05-08T16:41:41.257 回答
0

好吧,我使用以下方法来解决问题:

var request({url: 'http://XXX/articles.json'})
dest.pipe(articleIDParser)
dest.pipe(errorParser);
于 2014-05-09T03:26:02.780 回答