将 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.exports
和 exports[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 函数吗?如何?