将值传递给Json模式定义

时间:2018-06-05 15:03:28

标签: javascript node.js jsonschema json-schema-validator ajv

我在NodeJS上使用AJV Schema验证器,并希望将sessionObjectuserID添加到每个传入的有效负载,以便我可以为每个事务存储Client: { Client_Id: 12, ClientName: 'jon', Address: [{ Address_Id: 22, Street: 'Sesimi Street', City: 'Mumbai' } ], Contact: [{ Contact_Id: 23, Phone: 11111111, Email: "jon@doe.com"}]

我想知道是否可以在json架构中完成。

示例传入客户端有效负载 -

    Client: {
        Client_Id: 12,
        ClientName: 'jon',
        UserId: 12121,
        Address: [{
        Address_Id: 22,
        Street: 'Sesimi Street',
        City: 'Mumbai',
        UserId: 12121
        }
        ],
        Contact: [{
        Contact_Id: 23,
        Phone: 11111111,
        Email: "jon@doe.com",
        UserId: 12121
}]

所需的对象帖子架构验证 -

./kafka-preferred-replica-election.sh  --zookeeper myHost

由于传入的有效负载很大,我认为最好在模式验证点进行分配,而不是在我的应用程序内进行递归操作。我愿意接受建议。 谢谢

2 个答案:

答案 0 :(得分:0)

您可以尝试使用AJV的useDefaults功能。

var ajv = new Ajv({ useDefaults: true });
var schema = {
  "type": "object",
  "properties": {
    "ClientName": { "type": "string" },
    "UserId": { "type": "integer", "default": 12121 }
  }
};

var data = { "ClientName": "jon" };

var validate = ajv.compile(schema);

console.log(validate(data)); // true
console.log(data); // { "ClientName": "jon", "UserId": 12121 }

为了具有默认值的灵活性,您可以将dynamicDefaults与回调函数一起使用。例如:

var uuid = require('uuid');

function getUuid(args) {
  var version = 'v' + (arvs && args.v || 4);
  return function() {
    return uuid[version]();
  };
}

var definition = require('ajv-keywords').get('dynamicDefaults').definition;
definition.DEFAULTS.uuid = getUuid;

var schema = {
  dynamicDefaults: {
    id1: 'uuid', // v4
    id2: { func: 'uuid', v: 4 }, // v4
    id3: { func: 'uuid', v: 1 } // v1
  }
};

答案 1 :(得分:0)

谢谢你@vearutop的回答帮助我解决了我的问题。

我所做的只是使用从sessionObject

返回var Ajv = require("ajv"); var ajv = new Ajv({useDefaults: true,}); require("ajv-keywords")(ajv); var definition = require('ajv-keywords/keywords/dynamicDefaults').definition; definition.DEFAULTS.getuser = getuser; function getuser() { return sessionObject.UserId; } var schema = { dynamicDefaults: { user: 'getuser' }, properties: { user: {} } }; 的自定义函数
{{1}}