我使用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我错了吗?
提前致谢。
答案 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);