如何在RxDB中配置AJV插件以解决‘encrypted’关键字错误?
在RxDB中配置AJV验证插件以支持"encrypted"关键字
问题场景
添加RxDB的AJV验证插件后出现以下错误:
Uncaught Error: strict mode: unknown keyword: "encrypted"
尽管你的Schema中未显式使用encrypted关键字,但RxDB内部会为加密字段自动注入该关键字,而默认的AJV严格模式会拦截未知关键字。
解决方案
RxDB的AJV验证插件支持通过配置项自定义AJV实例或调整其行为,有两种常用方式:
方式1:传入自定义AJV实例
直接创建已配置好的AJV实例,添加encrypted关键字后传入插件:
import { RxDBAjvValidatePlugin } from 'rxdb/plugins/ajv-validate'; import Ajv from 'ajv'; // 创建AJV实例并添加"encrypted"关键字 const customAjv = new Ajv(); customAjv.addKeyword('encrypted'); // 添加插件时传入自定义实例 addRxPlugin(RxDBAjvValidatePlugin, { ajv: customAjv });
方式2:通过插件配置调整AJV
利用插件的afterAjvCreation钩子完成关键字添加,或通过ajvOptions调整AJV模式:
import { RxDBAjvValidatePlugin } from 'rxdb/plugins/ajv-validate'; addRxPlugin(RxDBAjvValidatePlugin, { // 可选:关闭AJV严格模式(不推荐,建议显式添加关键字) // ajvOptions: { strict: false }, // 推荐:在AJV实例创建后添加"encrypted"关键字 afterAjvCreation: (ajvInstance) => { ajvInstance.addKeyword('encrypted'); } });
说明
afterAjvCreation钩子会在RxDB创建AJV实例后触发,适合添加自定义关键字或修改实例配置;若选择关闭严格模式,需注意可能会忽略其他未知关键字的潜在问题,显式添加关键字是更安全的做法。
内容的提问来源于stack exchange,提问作者Ilya Loskutov
相关产品推荐
相关产品推荐

