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

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

谢谢。

【问题讨论】:

    标签: javascript node.js couchdb couchapp commonjs


    【解决方案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。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    • 2013-05-22
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多