如何构build模块更贴近/坚持Node.js理念

我对Node.js比较陌生,我想通过编写一个简单的模块来熟悉它。 该模块的目的是拿一个id,刮一个网站,并返回一个数据字典的数组。

网站上的数据分散在不同的页面中,而每个页面都由URI中的不同索引号访问。 我定义了一个采用idpage_number的函数,通过http.request()为这个page_number并在end事件中将数据传递给另一个函数,该函数使用一些RegEx以结构化方式获取数据。

为了使模块具有完整的function,网站上所有可用的page_nums都应该被page_nums

可以通过Node.js style / philosophy创build一个标准的()循环来为每个页面调用scraping函数,汇总每个返回的结果,然后从导出的函数中全部返回它们。

编辑

我想出了一个基于来自freenode的#node.js的帮助的解决scheme。 你可以在http://github.com/attheodo/katina_nodefind工作代码

谢谢大家的意见。

常见的方法,如果你不想打扰@ControlAltDel提到的库之一,是设置一个计数器等于页数。 由于每个页面都被处理(不同步,所以你不知道按照什么顺序,也不在乎),你减less柜台。 当计数器为零时,你知道你已经处理了所有的页面,并且可以继续进行下一个过程。

您可能遇到的问题是重新汇总所有聚合结果。 有几个库可以帮助,包括Async和Step。 或者你可以使用一个像Fibers.Promise的承诺库。 但后者不是真正的节点哲学,需要对节点可执行文件进行直接的代码更改/添加。

有了Freenode的#node.js的有用评论,我设法通过依次调用scraping函数和附加callback来find解决scheme,正如Node.js哲学所要求的。

你可以在这里find代码: https : //github.com/attheodo/katina_node/blob/master/lib/katina.js

感兴趣的代码块位于第87和114行之间。

谢谢你们