我已经为自定义查询语言构建了自定义查询服务器。
我尝试创建具有视图map/reduce
的设计文档。
在那些map/reduce
函数中(最重要的是在map函数中),我希望能够引用库代码。
我看到有一个lib节点可以添加到设计文档中。
我希望自定义查询服务器能够从CouchDB接收add_lib
消息,但是我从未见过。
http://docs.couchdb.org/en/stable/query-server/protocol.html#add-lib
add_fun
消息因依赖查询服务器中的库的代码而失败,因为尚未预先收到add_lib
消息。
“查询服务器应解析,编译和评估其功能 接收以便以后调用。”
http://docs.couchdb.org/en/stable/query-server/protocol.html#add-fun
由于add_fun
失败,这意味着我无法保存设计文档。
我已经查看了以下页面,但仍然没有成功:
How do I add the moment.js library to Cloudant NoSQL Design Doc on Bluemix
How do I DRY up my CouchDB views?
https://www.oreilly.com/library/view/couchdb-the-definitive/9780596158156/ch05.html
我做错了或似乎犯了一个错误,非常感谢您的帮助。
答案 0 :(得分:0)
以下网站具有将lib放入视图的正确方法。
https://caolan.org/posts/commonjs_modules_in_couchdb.html
这是基于工作语言的虚拟语言的新示例。
{
"_id": "_design/example",
"language": "customlang",
"views": {
"lib": {
"math": "pi = 3.14"
},
"map_everything_to_pi": {
"map": "imports math; pi"
}
}
}
之所以出现问题,是因为在依赖库的map函数中有代码时,我无法保存设计文档。
通过将map函数调整为不依赖于库,我现在已经能够保存文档,并且在查询视图时,我目睹了add_lib消息被发送到查询服务器。
在CouchhDB 2.2.0中,查询视图时发送add_lib,但是在保存设计文档(在其中调用add_fun时)时不会立即发送。在我看来,应在CouchDB发送add_fun消息之前为每个库调用add_lib。
这个事实使add_fun无法评估/预编译代码,因为该库尚不为人所知。 add_lib必须成功才能保存设计文档,因此无法保存设计文档。
我可能需要提出一个错误跟踪器问题。