【问题标题】:Having trouble with CouchDB design document and validate_doc_update functionCouchDB 设计文档和 validate_doc_update 函数有问题
【发布时间】:2013-01-12 17:20:44
【问题描述】:

我是 CouchDB 的新手,在让我的设计文档在我的数据库中工作时遇到了很多麻烦。

这是我的设计文档:

{
"language": "javascript",

"validate_doc_update": "function(newDoc, oldDoc, userCtx) {
    function require(field, message) {
        message = message || "Document must have a " + field;
        if (!newDoc[field]) throw({forbidden : message});
    };
    function unchanged(field) {
        if (oldDoc && toJSON(oldDoc[field] != toJSON(newDoc[field])) {
        }
    };

    if (newDoc.type == "fortune") {
        require("body");
        require("sequence_id");
        require("created_at");
        unchanged("sequence_id");
        unchanged("created_at");
    }
};",

"views": { 
    "fortune_count": {
        "map": "function(doc) { if(doc.sequence_id && doc.body) { emit(doc.sequence_id, doc.body); }",
        "reduce": "_count"
        }
},

"shows": {
}
}

让我分解一下我遇到的问题:

  1. 我无法将此作为放置请求发送到我的数据库。 显然这是无效的 JSON。我不是 JSON 专家,而且 这非常令人沮丧。有什么想法吗?

  2. 由于我在 put 请求中遇到的问题,我决定 使用蒲团添加我的设计文档。我的数据库似乎很好 使用我在这里的视图,但是当我尝试将文档添加到 数据库,我收到一条错误消息,说我的 validate_doc_update 文本 不评估为函数。关于我的问题的任何建议 验证函数?

由于我的验证功能遇到困难,我尝试在设计文档中放置一个哑版本:

"validate_doc_update": "function(newDoc, oldDoc, userCtx) { if (newDoc.type == "fortune") {} };",

我可以使用这个版本创建文档,但它没有多大用处。

任何帮助将不胜感激。

谢谢,

保罗·尼科尔斯

【问题讨论】:

  • 我很肯定其他人会有更好的答案,但我在放入设计文档时也遇到过类似的问题。我经常使用jsonlint.com 来清理我的 json 并验证它。在您的设计文档中粘贴指向第三行。我遇到了完全相同的问题,并编写了一个脚本来从我的 json 文本中删除制表符和回车符。那时我可以插入它!哈哈哈。此外,在使用 PUT 上传文档时,我的文件中有一个字节顺序标记,使其无效。去掉前三个字节就好了。
  • 你的函数体内有",它破坏了 JSON。您需要转义 require(...)unchanged(...) 中的那些。即:require(\"body\");

标签: json couchdb


【解决方案1】:

您刚刚忘记在(oldDoc && toJSON(oldDoc[field] != toJSON(newDoc[field])) 中关闭括号

【讨论】:

    猜你喜欢
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多