Cosmos db readDocument api не работает в хранимой процедуре - PullRequest
0 голосов
/ 20 сентября 2018

Простая хранимая процедура с использованием функции readDocument в CosmosDB / DocumentDB, но она не работает.

function testRead() {
    var collection = getContext().getCollection();

    var docId =  collection.getSelfLink() + 'docs/myDocId';

    // Query documents and take 1st item.
    var isAccepted = collection.readDocument(docId, {}, function (err, doc, options) {
        if (err) throw err;

        response.setBody(JSON.stringify(doc));
    });

    if (!isAccepted) throw new Error('The query was not accepted by the server.');
}

она всегда получает код ошибки 400.

{"code ": 400," body ":" {\ "code \": \ "BadRequest \", \ "message \": \ "Message: {\\" Errors \\ ": [\\" Обнаружено исключение при выполненииJavascript. Исключение = Ошибка: Ошибка при создании сообщения запроса \\ r \\ nСтекстак: Ошибка: Ошибка при создании сообщения запроса \\ n в readDocument (testRead.js: 512: 17) \\ n в testRead (testRead.js: 8:5) \\ n в __docDbMain (testRead.js: 18: 5) \\ n в глобальном коде (testRead.js: 1: 2) \\ "]} \ r \ nActivityId: 2fb0f7ef-c192-4b56-b8bb-9681c9f8fa6e, URI запроса: / apps / DocDbApp / services / DocDbServer22 / partitions / a4cb4962-38c8-11e6-8106-8cdcd42c33be / replicas / 1p /, RequestStats:, SDK: Microsoft.Azure.Documents.Common / 1.22.0.0 \ "}", "ActivityId": "2fb0f7ef-c192-4b56-b8bb-9681c9f8fa6e", "substatus": 400}

Кто-нибудь может мне помочь?

Ответы [ 3 ]

0 голосов
/ 20 сентября 2018

Redman.

Вы можете изменить свой код следующим образом:

function testRead() {
    var collection = getContext().getCollection();

    var docId =  collection.getAltLink() + 'docs/myDocId';
    console.log(collection.getSelfLink() + 'docs/myDocId');

    var isAccepted = collection.readDocument(docId, {}, function (err, doc, options) {
        if (err) throw err;

        response.setBody(JSON.stringify(doc));
    });

    if (!isAccepted) throw new Error('The query was not accepted by the server.');
}

Или вы можете использовать следующий пример кода для запроса документа, он также содержит все поля.

function testRead() {
    var collection = getContext().getCollection();

    var query =  "select * from c where c.id = '1'";
    var isAccepted = collection.queryDocuments(collection.getSelfLink(), query,function (err, doc, options) {
        if (err) throw err;
        var response = getContext().getResponse();
        response.setBody(JSON.stringify(doc));
    });

    if (!isAccepted) throw new Error('The query was not accepted by the server.');
}

Надеюсь, это поможет вам.

0 голосов
/ 21 сентября 2018

По предложению Майкла, мой образец работает сейчас, вот код

function testRead() {
    var collection = getContext().getCollection();
    var response = getContext().getResponse();

    var docId =  collection.getAltLink() + '/docs/myDocId';

    // Query documents and take 1st item.
    var isAccepted = collection.readDocument(docId, {}, function (err, doc, options) {
        if (err) throw err;

        response.setBody(JSON.stringify(doc));
    });

    if (!isAccepted) throw new Error('The query was not accepted by the server.');
}
0 голосов
/ 20 сентября 2018

Можете ли вы попробовать это: var docId = collection.getAltLink () + 'docs / myDocId';- Самостоятельная ссылка не для "маршрутизации имени".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...