如何访问Node.js的请求模块的输出

有几个教程描述如何使用requestcheerio来抓取网站。 在这些教程中,他们将输出发送到控制台,或者将带有fs的DOMstream式传输到文件中,如下例所示。

 request(link, function (err, resp, html) { if (err) return console.error(err) var $ = cheerio.load(html), img = $('#img_wrapper').data('src'); console.log(img); }).pipe(fs.createWriteStream('img_link.txt')); 

但是如果我想在脚本执行期间处理输出呢? 我怎样才能访问输出或发送callback用函数? 当然,我可以加载img_link.txt并从那里获取信息,但是这样会花费很多而且没有意义。

您可以将请求包装在一个函数中,该函数将使用htmlcallback

 function(link, callback){ request(link, function(err, im, body){ callback(err, body); }); }); 

然后将其分配给exports并在任何其他模块中使用。

一起拆除pipe道。

 request(link, function (err, resp, html) { if (err) return console.error(err) var $ = cheerio.load(html); var img = $('#img_wrapper').data('src'); // the var img now has the src attr of some image return img; // Will return the src attr }); 

更新

通过您的意见,似乎您的请求function正在按预期工作,但问题是访问另一个模块的数据。

我build议你阅读Node.js module.exports的这个目的以及如何使用它

这也是一个很好的资源文章描述如何要求出口工作。

  • 把上面的代码放在一个模块中
  • 使用module.exports
  • 需要另一个文件中的模块