在测试DocumentDb存储过程时,我故意创建了一个具有重复id的文档,以便我可以观察DocumentClientException。根据{{3}}的文档,我期待异常有409状态代码表明冲突。
存储过程代码如下:
isAccepted = collection.createDocument(collectionLink,
duplicateIdDoc,
{ disableAutomaticIdGeneration: true },
function(err, createdDoc, options){
if (err) throw err; // Rollback
});
我收到异常,但错误代码是400(BadRequest)。消息文本指示正确的问题。已存在具有指定标识或名称的资源。
“消息:{\”错误\“:[\”执行函数时遇到异常。异常=错误:{\\“错误\\”:[\\“具有指定标识或名称的资源已存在\\”]} \ r \ n堆栈跟踪:错误:{\\“错误\\”:[\\ “具有指定id或名称的资源已存在\\”]} \ n在匿名函数(duplicateIdTest.js:56:26)\ n在匿名函数(duplicateIdTest.js:685:29)\“]} \ r \ nActivityId :886230cf-8d49-433e-845f-8cc7c2ae486d,请求URI:/ apps / 514defcb-ac21-44e6-a8e0-c7b785523c6c / services / 32782613-7101-4924-97b0-604052a6723b / partitions / be6c2ec8-130c-4596-90a2-b1807977dd0b /副本/ 131240065159522367p“
我错过了什么吗?感谢。
答案 0 :(得分:0)
存储过程中引发的所有错误都将传播为400 (BadRequest)
。但是,对createDocument
等数据库的单独调用会返回与REST API相同的错误代码。
例如,您可以检查回调中err.code === 409
的值,以验证crateDocument
因冲突而失败。不是别的。
答案 1 :(得分:0)
err.code不起作用,在回调中使用err.number来处理已知异常
例如:err.number === 409冲突