【问题标题】:Document Client Exception Incorrect Error Status Code文档客户端异常不正确的错误状态代码
【发布时间】:2018-04-24 02:29:58
【问题描述】:

在测试 DocumentDb 存储过程时,我故意创建了一个具有重复 id 的文档,以便我可以观察 DocumentClientException。根据http://azure.github.io/azure-documentdb-js-server/Collection.html#.ErrorCodes 的文档,我预计异常会有一个 409 状态代码指示冲突。

存储过程代码如下:

isAccepted = collection.createDocument(collectionLink, 
        duplicateIdDoc,
        { disableAutomaticIdGeneration: true },
        function(err, createdDoc, options){
            if (err) throw err;  // Rollback                      
        });

我确实收到了异常,但错误代码是 400 (BadRequest)。消息文本指示正确的问题。具有指定 ID 或名称的资源已存在。

"消息:{\"Errors\":[\"执行函数时遇到异常。异常 = 错误:{\\"Errors\\":[\\"具有指定 ID 或名称的资源已存在\\"]}\r\n堆栈跟踪:错误:{\\"Errors\\":[\\ "具有指定 ID 或名称的资源已存在\\"]}\n 在匿名函数 (duplicateIdTest.js:56:26)\n 在匿名函数 (duplicateIdTest.js:685:29)\"]}\r\nActivityId : 886230cf-8d49-433e-845f-8cc7c2ae486d, Request URI: /apps/514defcb-ac21-44e6-a8e0-c7b785523c6c/services/32782613-7101-4924-97b0-604052a6723b/partitions/be6c2ec8-130c-4596-90a2-b1807977dd0b /replicas/131240065159522367p"

我错过了什么吗?谢谢。

【问题讨论】:

    标签: azure-cosmosdb


    【解决方案1】:

    存储过程中引发的所有错误都以400 (BadRequest) 传播。但是,像 createDocument 这样对数据库的单独调用会返回与 REST API 相同的错误代码。

    例如,您可以在回调中检查 err.code === 409 的值,以验证 crateDocument 由于冲突而失败。 amd 不是别的。

    【讨论】:

    • 谢谢。似乎有点奇怪,但我能够使用以下if (err) throw new Error('CODE' + err.number + 'CODE'); 获取实际代码,并使用正则表达式将其从错误消息中拆分出来。
    【解决方案2】:

    err.code 不起作用,在回调中使用 err.number 来处理已知异常

    例如:err.number === 409 表示冲突

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多