基于CouchDB(Fauxton)创建Product文档name字段验证规则
CouchDB 产品文档必填字段验证实现
嘿,我来帮你搞定这个CouchDB的验证规则。根据你的需求,我们需要确保所有新建的type为Product的文档都包含name字段,下面是完整的验证函数,以及使用说明:
完整的验证函数代码
function(newDoc, oldDoc, userCtx) { // 封装一个检查必填字段的小工具函数 function require(field, customMessage) { if (!newDoc[field]) { // 抛出错误,CouchDB会拒绝文档写入 throw({ forbidden: customMessage || `字段 "${field}" 是必填项,请补充后重试` }); } } // 只对新建的Product类型文档做验证 // !oldDoc 表示这是创建操作,不是更新已有文档 if (newDoc.type === 'Product' && !oldDoc) { require('name', '产品文档必须包含name字段,不能为空'); } }
代码说明
- 首先写了个
require辅助函数,用来复用必填字段的检查逻辑,它会判断指定字段是否存在,不存在就抛出forbidden类型的错误,CouchDB收到这个错误后会拒绝文档的创建请求。 - 核心判断逻辑:只有当新文档的
type是Product,并且是首次创建(!oldDoc意味着没有旧文档,不是更新操作)时,才会触发name字段的检查。如果你希望更新Product文档时也强制检查name字段,只需要去掉!oldDoc这个条件就行。
怎么使用这个验证函数
你需要把这个函数放到数据库的设计文档(_design文档)里的validate_doc_update字段中。举个例子,你可以创建这样一个设计文档:
{ "_id": "_design/product-validator", "validate_doc_update": "function(newDoc, oldDoc, userCtx) { function require(field, customMessage) { if (!newDoc[field]) { throw({ forbidden: customMessage || `字段 \"${field}\" 是必填项,请补充后重试` }); } } if (newDoc.type === 'Product' && !oldDoc) { require('name', '产品文档必须包含name字段,不能为空'); } }" }
你可以通过CouchDB的API、Fauxton管理界面,或者curl命令把这个设计文档添加到你的数据库中。之后,任何新建的Product文档如果没有name字段,都会被CouchDB拒绝,并返回你设置的错误信息。
内容的提问来源于stack exchange,提问作者wintermeyer
相关产品推荐
相关产品推荐

