我正试图围绕 Node.js 流转转,并不是说我对 JavaScript 和节点很陌生,我真正掌握的最后一种语言是 Perl 和 PHP :-D
我已经阅读了 @nodejs.org 的 Buffer/Streams 文档,观看了 James Halliday @LXJS,阅读了他的流手册和 Thorsten Lorenz事件流帖子。我开始了解基础知识:)
我处理在 RDF 中序列化的数据(既不是 JSON 也不是 XML)。我设法获取数据(通过请求在真实代码中)并使用rdfstore
模块将其解析为 JS 对象。
到目前为止,我这样做:
s.createReadStream('myRDFdata.ttl').pipe(serialize()).pipe(process.stdout);
serialize()
现在同时解析序列化代码的工作在哪里。我使用through
模块来连接流。
现在我有更多方法(不是真正的函数声明,但我希望你明白这一点):
getRecipe(parsedRDF)
-> 获取已解析的 RDF(作为 JavaScript 对象)并告诉我如何使用它createMeal(parsedRDF, recipe)
-> 从上面获取已解析的 RDF 和配方,并从中创建一个新的 RDF 对象- 这个新对象需要被序列化并发送到浏览器
- (在现实世界
getRecipe
中将不得不在浏览器中进行用户交互)
当我稍后增强代码时,我喜欢通过管道将它们链接在一起以获得更高的灵活性的想法。但我不想每次都将它序列化为 RDF 序列化,而只是发送 JS 对象。根据我在文档中阅读的内容,我可以使用该stringify
模块从每个步骤中获取一个字符串,以便将其传递到下一步。但:
- 这真的有意义吗?就我是否增加了不必要的开销或者这可以忽略不计?
- 我不知道如何将 parsedRDF 提供给
getRecipe
具有必须首先调用的依赖项的两种方法,并且输出也是输入createMeal
。有没有可以帮助我的模块? - 可能是我必须向用户询问最终的配方选择,所以我可能需要将内容发送到那里的浏览器以获得最终答案。当管道“等待”时,我可以在套接字上做这样的事情吗?
我希望这表明我正在尝试做的事情,如果没有,我会尝试提供更多细节/改写。
更新:睡过之后,我想出了更多的东西:
- 如果有官方的序列化格式,将像 RDF 这样的格式序列化为非标准的格式可能没有意义。
stringify
因此,我将简单地在步骤之间传递官方 RDF 序列化,而不是使用 - 这确实意味着我在每个步骤中解析/序列化对象,这肯定会增加开销。问题是我在乎吗?我可以扩展我用来从流中解析并序列化的 RDF 模块
- 我可以通过简单地从to中添加一些信息来解决 和 之间的依赖问题
getRecipe
,这可以通过 RDF 轻松完成,而不会破坏原始数据模型。但是我仍然很想知道我是否可以使用管道处理这样的依赖项createMeal
getRecipe
parseRDF