将 CouchDB 与 Node.js 库一起使用

Posted

技术标签:

【中文标题】将 CouchDB 与 Node.js 库一起使用【英文标题】:Use CouchDB with Node.js library 【发布时间】:2013-08-28 10:54:38 【问题描述】:

CouchDB 使用 javascript 来验证、查询、做 map-reduce 等等。我想知道有没有办法在这些 javascript 函数中使用 node.js 库?比如使用require('http')或者安装了npm的一些第三方模块。

谢谢。

【问题讨论】:

【参考方案1】:

您可以使用 Node.js 库,只要它们不需要特定于 Node.js 的库,例如 http。例如,async 在 CouchDB 中工作。经验法则:如果它适用于服务器客户端,你应该很好。

您可以使用 CommonJS 的 module.exportsexports[something] 模式在视图之间共享代码。查看the documentation了解更多详情。

例如,考虑这个视图:


  _id:"_design/test",
  views: 
    lib: 
      test: "exports.guests = 42;"
    ,
    fish_per_person: 
      map: function(doc)
        var guests = require('views/lib/test').guests; // 42
        emit(doc.number_of_fish, doc.number_of_fish / guests);
      
    
  

fish_per_person 视图需要在 lib/test 中导出的值 guests

【讨论】:

谢谢。但我想我会需要这些库。 哪些库?你想达到什么目的?这听起来像是一个挑战,我很感兴趣。 我现在没有具体的事情要完成。但我可以想象一些。例如,如果我正在处理online judge system,在用户提交代码后,我需要使用child_process 在CouchDB 更新处理程序中编译和运行它。 聪明!我将在 Cloudant 提出这个用例,看看我们能做什么。另一方面,在应用层做到这一点并不难。从 Node.js 进程查看数据库的 _changes 提要,并在相关更改通过提要时做出反应。【参考方案2】:

不,没有办法从 CouchDb 内部的 Node 模块使用外部 JavaScript。你可以做一些有限的分享:http://wiki.apache.org/couchdb/HTTP_view_API#Sharing_Code_Between_Views

Node 是一个暴露于 Javascript 语言绑定的平台,因此 Node 的“优点”在于执行环境。

虽然有一种方法可以使用 Python 编写视图,但我不知道 Node 有什么类似的东西。

【讨论】:

值得指出的是,CouchDB 目前使用 Mozilla 的 SpiderMonkey JS 引擎来执行。但是,在 CouchDB 邮件列表中已经讨论过用 Node.js 替换它,这将允许在 CouchDB 中使用 NPM 模块。 (但这还有很长的路要走) 有趣的发现。用于生产用途?不,我不会使用它。此外,由于节点是单线程的,因此您会将所有内容集中到一条路径上。 @WiredPrairie 我找到了an article。事实上,我可以使用任何语言来编写视图服务器。它使用标准输入/标准输出进行通信。所以我认为在查询视图服务器时会有一个拆分过程开始。你认为它可以用于生产环境吗? 他要多点故障吗? Nodejs 也没有达到 1.0。

以上是关于将 CouchDB 与 Node.js 库一起使用的主要内容,如果未能解决你的问题,请参考以下文章

在 Apache 或 IIS 中托管时将 Backbone.js 与 CouchDB 连接

JavaScript Node.js:将基于地理的Flickr数据导入CouchDB

node.js 可以像 CouchApp 一样执行从 CouchDB 提取的 JavaScript 函数吗?如何?

将 JSON 数据库与 Node 和 React 一起使用

如何将 Angular JS 与 Leaflet.js 一起使用

将 couchdb 与 Android 应用程序捆绑在一起