如何在CouchDB中查找错误请求的原因

h43kikqp  于 2022-12-09  发布在  CouchDB
关注(0)|答案(2)|浏览(145)

我使用System .NET.WebClient将文档批量上载到CouchDB,如下所示:

webClient.UploadString("couchdb.host.com:5984/db/_bulk_docs", "POST", json_data);

这通常工作正常,但有时我会得到一个WebException,状态为“Bad Request”(400)。不幸的是,这是我得到的唯一信息,所以我真的不知道是什么导致了异常。
我检查了/var/log/couchdb/couchdb. log下的日志文件,但没有得到任何进一步的信息:

[notice] 2019-09-10T15:26:09.173949Z couchdb@host.com <0.5318.568> f50ab02d22 host.com:5984 x.x.x.x undefined POST /db/_bulk_docs 400 ok 75

所以我的问题是:

  • WebException对象中是否隐藏了更多信息?如果是,在哪里可以找到它?
  • 有没有办法在服务器端获得更多的信息?

我怀疑我上传的文件太大了。我该怎么检查呢?

更新日期:

我将出错的请求转储到一个文件中,其中包含:

catch (WebException ex)
        {
            File.WriteAllText("C:\\temp\\couchdb_bad_request.json", json_data);
        }

并再次尝试:

curl -X POST http:/couchdb.host.com:5984/db/_bulk_docs -H "Content-Type: application/json" -d @couchdb_bad_request.json

这次我得到了201。那么curl和WebClient请求之间有什么区别呢?
我的json数据看起来像这样:

{
  "docs": [
    {
      "Type": "Image",
      "_attachments": {
        "123_original.jpg": {
          "content_type": "image/jpeg",
          "data": "<base64-encoded image data>"
        }
      },
      "ID": "123",
      "_id": "123",
      "FileName": "some_file.jpg",
      "AttachmentMetaData": {
        "original": {
          "Width": 864,
          "Height": 576,
          "MD5Checksum": "a20ecae8e3a7df8cc8558a71efc2b573"
        }
      }
    },
    {...}
  ]
}
svgewumm

svgewumm1#

根据您的问题信息,请求数据在某个点上一定是错误的。由于一些请求是正确的,而一些不是,这可能是由于编码问题。
您可能需要查看来自CouchDB的响应,该响应通常会提到编码问题。
若要读取回应:

catch ( WebException exception )
{
   string responseText;

   using(var reader = new StreamReader(exception.Response.GetResponseStream()))
   {
     responseText = reader.ReadToEnd();
   }
}
bweufnob

bweufnob2#

在节点上,可以使用await error.json()读取异常响应

try {
  await request();
} catch(error) {
  console.log(await error.json());
}

相关问题