簡體   English   中英

創建后如何在 Joi object 中更新模式 object?

[英]How to update a schema object, after creation, inside a Joi object?

不確定表達問題的最佳方式,但這是我正在嘗試做的事情的一個例子。

const schema = Joi.Object().keys({
   array: Joi.array().length(5)
});

然后在創建之后我想將長度方法更新為不同的數字。

this.schema.keys({ array: Joi.array().length(8) });

上面的代碼不起作用,我真的不確定還能嘗試什么。 (這不是我嘗試過的唯一方法,只是我目前所在的位置)我一直在查看文檔,但沒有發現任何有助於更新架構的內容。 也許有人知道這樣做的方法?

任何幫助將非常感激!

const Joi = require('joi');

////
// update schema itself.
////
let scheme = Joi.object().keys({
  foo: Joi.array().length(5),
});

const a1 = scheme.validate({ foo: [1,2,3,4,5] });
console.log(a1.error); // undefined. valid.

scheme = scheme.keys({
  foo: Joi.array().length(8),
});

const a2 = scheme.validate({ foo: [1,2,3,4,5] });
console.log(a2.error); // array.length error occurred.

const a3 = scheme.validate({ foo: [1,2,3,4,5,6,7,8] });
console.log(a3.error); // undefined. vaild.

////
// using base scheme.
////
const base = Joi.object().keys({
  foo: Joi.array(),
});

const base_a = base.keys({
  foo: Joi.array().length(5),
});
console.log('Using base a1', (base_a.validate({ foo: [1,2,3,4,5]})).error);

const base_b = base.keys({
  foo: Joi.array().length(8),
});
console.log('Using base a2', (base_b.validate({ foo: [1,2,3,4,5]})).error);
console.log('Using base a3', (base_b.validate({ foo: [1,2,3,4,5,6,7,8]})).error);

////
// Not good but works.
////
const obj = Joi.object({
  foo: Joi.array().length(5),
});
console.log('Obj a1', (obj.validate({ foo: [1,2,3,4,5]})).error);

const merged = Object.assign(obj, Joi.object({
  foo: Joi.array().length(8),
}));

console.log('Obj a2', (merged.validate({ foo: [1,2,3,4,5]})).error);
console.log('Obj a3', (merged.validate({ foo: [1,2,3,4,5,6,7,8]})).error);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM