自动添加AJV自定义关键字

我正在使用AJV验证我的JSON模式。目前,该模式是从模块“必需”的,并通过AJV实例进行编译。我正在添加自定义验证器(AJV语音中的自定义关键字)以验证英国的手机号码。我的文件如下所示:

main-service.js

const Ajv = require('ajv');
const AjvErrors = require('ajv-errors');
const templates = require('./templates');

const ajv = new Ajv({
    allErrors: true,jsonPointers: true,format: 'full',coerceTypes: true
});

AjvErrors(ajv);

ajv.addFormat('x-mobilePhoneNumber',mobilePhoneNumber => {
    return isValidmobilePhoneNumber(mobilePhoneNumber);
});

function someFunc(){
    const answers = {key: "answer"};
    const schema = templates['some-name'](id)
    const validate = ajv.compile(schema);
    const valid = validate(answers);
    *** Do some stuff with this ***
};

function isValidmobilePhoneNumber(number) {
    *** code to validate a phone number ***
};

templates.js

const template = require('q-templates-application');  // this returns the JSON-Schema object.

module.exports = {
  'some-name': id => {
      template.id = id;
      return template;
}

一旦需要“模板”,它将包含一个将使用mobilePhoneNumber关键字的JSON-Schema对象。此实现按预期工作并验证。但是,我遇到的问题是,它依赖于将自定义验证器硬编码到我的主要服务中。

基本上,我希望将自定义验证代码(在这种情况下,用于手机号码,以及以后选择添加的任何其他验证器)与模板一起返回,从而使我可以将任何自定义验证附加到模板,而不必每个都进行硬编码。

我不确定如何做到这一点,甚至是可能的。我一直在尝试实现以下内容:

  • main-service启动AJV
  • template.js文件中需要
  • template
  • const template = require('q-templates-application')导入一个函数而不是json-schema对象
  • 函数检查架构中是否存在其他关键字,或者自定义关键字单独列出
    • 如果是,则函数执行ajv.addFormat命令
    • 如果不是...那不是!
  • 函数返回JSON模式对象

我正在努力寻找一种合适的方法来表述上述内容,因此,请将所有可能的解决方案,无论是部分解决方案,还是全部解决方案,都应感谢!

yuanxiao_001 回答:自动添加AJV自定义关键字

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2651436.html

大家都在问