1

ほんの数週間前にCouchdbを初めて使用しましたが、 sofa [whatandapp]というcouchdbアプリのクローンを作成しました。一週間でうまくいきましたが、今日突然何かに出くわしました。

ここで、Sofaアプリを参照して、タイトルなしで投稿を作成しようとすると、「ドキュメントを保存できませんでした。データベースを作成できませんでした。ファイルは既に存在します。」という 警告ボックスが表示されます。ソースを見ると奇妙でした。require(validate_doc_update.jsで カスタムjsonエラーを返す)は、この形式{"forbidden":message})のように、キーとしてforbiddenを使用していることがわかりました。

  v.forbidden = function(message) {
      throw({forbidden : message})
  };

   v.require = function() {
        for (var i=0; i < arguments.length; i++) {
          var field = arguments[i];
          message = "The '"+field+"' field is required.";
          if (typeof newDoc[field] == "undefined") v.forbidden(message);
        };
      }; 

validate_doc_update.jsで

if (newDoc.type == 'post') {
    if (!v.isAuthor()) {
      v.unauthorized("Only authors may edit posts.");
    }
    v.require("created_at", "author", "body", "format", "title");

返されたjsonがjsonとは異なることが判明した応答状態を調べると、上記の validate_doc_update.js のrequire関数によって返されます。ここにjson {"error": "file_exists"、 "reason":"データベースを作成できませんでした。ファイルは既に存在します。"}

これにより、validation_doc_update.jsの検証は、ドキュメントの更新中にのみ実行されると考えられます。

この点を証明するために、タイトルのないドキュメントを更新しようとしています。エラーが返されることを期待していますが、驚くべきことに、ドキュメントは保存されたばかりです。

だからここに私が上で述べたすべてのポイントに関する私の質問があります

validate_doc_update.jsの「検証」はドキュメントの更新中にのみ機能しますか

if YES 
   then 
      how can I manage to succeed in updating a post without the error [Weird bypassing the Validation Completely] . +  How can execute validation on create of a document
if NO
   then 
     What is  the Error {"error":"file_exists","reason":"The database could not be created, the file already exists."} that is prevent a document to be saved  

ここにリストされているすべての質問に光を当ててください。

4

1 に答える 1

2

はい、validate_doc_update関数は、ドキュメントの更新(作成と削除を含む)時にのみ実行されます。

ここに示す関数は、タイプが「投稿」でない限り、タイトルのないドキュメントを許可します。あなたが試みた実際の要求を含めることができれば、私はそれを確認することができます。

最後に、「データベースを作成できませんでした」は、データベースがすでに存在するときにデータベースを作成しようとしているためです(PUT / dbname/docidの代わりにPUT/dbname /を実行することで)。実際のリクエストを含めて、私もそれを確認できました。

于 2011-09-24T12:01:16.520 に答える