Добавление документа в Couchbase и отсутствующее тело JSON - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь использовать Couchbase REST API для добавления документа в существующие документы. Я просто тестирую это в Postman, когда пишу код.

POST:

http://<ip>:8091/pools/default/buckets/<bucketname>/docs/testdoc1?rev=1

Headers:

Accept: application/json
Authorization : xxxxx

Body:

Raw JSON (application/json)
{
  "Name": "xxx",
  "Address": "yyy",
  "Phone number": "xxxx",
  "Badge": "yyy",
  "BadgeType": "xxx"
} 

Когда я отправляю выше в Почтальоне, это добавляет этот новый документ. в папке couchbase Documents / Bucket, но в поле body это выглядит так: «Двоичный документ, base64 недоступен»

Я пытался даже из моего html-кода, но тело json не получало в конце couchbase.

<!DOCTYPE html>
<html>
<body>

<input type="submit" value="Start" onclick="submit()">

<script type="text/javascript">
var params = {
  "Name": "xxx",
  "Address": "yyy",
  "Phone number": "xxxx",
  "Badge": "yyy",
  "BadgeType": "xxx"
} 
    function submit() {
        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function () {
            if (xhr.readyState === 4) {
                alert(xhr.response);
            }
        }
        xhr.open('post', 'http://<ip>:8091/pools/default/buckets/<buckname>/docs/testdochtml?rev=1', true);
        xhr.setRequestHeader('Content-Type', 'application/json');
        xhr.setRequestHeader('Accept', 'application/json');
        xhr.setRequestHeader('Authorization', 'Basic ' + 'xxxxxxx');

        xhr.send(JSON.stringify(params));
    }
</script>

<p>Click on the submit button.</p>

</body>
</html>

Может ли кто-нибудь подсказать мне, почему этот JSON не будет правильно работать на базе?

1 Ответ

0 голосов
/ 02 ноября 2018

Прежде всего: насколько я знаю, эта конечная точка не поддерживается и не документирована. Если вы где-нибудь увидите, что поддерживается , дайте мне знать, потому что я думаю, что это нужно исправить. Вместо этого вы должны использовать один из SDK (Java, .NET, Node и т. Д.).

Как говорится , я смог заставить его работать через Почтальона. Вы не можете просто отправить необработанный JSON в качестве документа. Вам нужно POST закодировать данные формы. Одним из значений, ожидаемых этой конечной точкой, является «значение», которое содержит закодированный документ JSON.

Вот пример того, что я сделал (я назвал свое ведро "так"):

POST /pools/default/buckets/so/docs/testdoc2 HTTP/1.1
Host: localhost
cache-control: no-cache
Postman-Token: ba87ef4e-4bba-42b4-84da-ae775b26dbcb
value=%7B%0A%09%22Name%22%3A+%22xxx%22%2C%0A%09%22Address%22%3A+%22yyy%22%2C%0A%09%22Phone+number%22%3A+%22xxxx%22%2C%0A%09%22Badge%22%3A+%22yyy%22%2C%0A%09%22BadgeType%22%3A+%22xxx%22%0A%7D%0A

Обратите внимание, что приведенное выше значение является просто JSON в вашем URL-адресе в вашем вопросе (Почтальон закодировал его для меня, и Почтальон, должно быть, тоже добавил заголовок элемента управления кешем, потому что я этого не указал):

enter image description here

...