CouchDB 在必填字段验证时返回 HTTP 403
CouchDB returning HTTP 403 on required field validation
过去几周我一直在为一个小型 Couch/NodeJS 项目工作,我需要一些现场验证(必填,类型...)。我通过在设计文档中添加 validate_doc_update 解决了这个问题。
经过一些测试后,我意识到我收到的是 403 禁止的 HTTP 代码,而不是 400 错误请求,我认为这在这个用例中更合适。
CouchDB Documentation 说我可以只抛出这些错误对象之一:
Throws: 优雅地阻止文档存储的禁止错误。 (403)
Throws:未授权错误以防止存储并允许用户重新授权。 (401)
关于管理此类验证问题的最佳方法有什么想法吗?
更新:
validate_doc_update的内容:
function (newDoc, oldDoc, userCtx){
function require(field, message){
message = message || "Block must have a " + field;
if (!newDoc[field]) throw({forbidden : message});
};
if(newDoc.type == "block"){
require("name")
}
}
我知道 throw({forbidden: message}) 会给出 403...有什么方法可以改变 CouchDB 上的这种行为,或者我应该在 express 上构建自己的验证中间件吗?
是的,这实际上是 CouchDB 的一个丑陋角落。我很惊讶仍然没有规定以 422 响应(这比 403 更适合无效文档),但是是的 - 我们所做的是添加我们自己的中间件来做正确的事情。
过去几周我一直在为一个小型 Couch/NodeJS 项目工作,我需要一些现场验证(必填,类型...)。我通过在设计文档中添加 validate_doc_update 解决了这个问题。
经过一些测试后,我意识到我收到的是 403 禁止的 HTTP 代码,而不是 400 错误请求,我认为这在这个用例中更合适。
CouchDB Documentation 说我可以只抛出这些错误对象之一:
Throws: 优雅地阻止文档存储的禁止错误。 (403)
Throws:未授权错误以防止存储并允许用户重新授权。 (401)
关于管理此类验证问题的最佳方法有什么想法吗?
更新:
validate_doc_update的内容:
function (newDoc, oldDoc, userCtx){
function require(field, message){
message = message || "Block must have a " + field;
if (!newDoc[field]) throw({forbidden : message});
};
if(newDoc.type == "block"){
require("name")
}
}
我知道 throw({forbidden: message}) 会给出 403...有什么方法可以改变 CouchDB 上的这种行为,或者我应该在 express 上构建自己的验证中间件吗?
是的,这实际上是 CouchDB 的一个丑陋角落。我很惊讶仍然没有规定以 422 响应(这比 403 更适合无效文档),但是是的 - 我们所做的是添加我们自己的中间件来做正确的事情。