[英]How to format JOI date/schema correctly?
我有一個通過obj.pattern
強制執行驗證限制的obj.pattern
。 我要驗證的密鑰是格式化日期,該日期以以下DD/MM/YYYY
格式提供給函數。
我正在使用Joi.date
對此值進行驗證,當一天少於12月12日時可以使用此值。 如果更多,則返回錯誤。 假設默認的JOI格式為MM/DD/YYYY
,這顯然會導致錯誤,因為日歷年中有12個月。 這反映在控制台日志中-如果我將numberField
的日值numberField
為大於12的任何值,那么我會看到錯誤。 如果它保持在下面,則不會引發任何錯誤。
我想弄清楚如何格式化此響應,以便JOI可以驗證正確的架構。 我已經將問題簡化為一個我在這里共享的原型: https : //codesandbox.io/embed/naughty-booth-862wb
有人可以幫忙嗎?
您需要使用.format()
joi-date
包中的.format()
方法來設置自定義日期格式。 請查看內聯注釋。
import "./styles.css";
import JoiBase from "@hapi/joi";
import JoiDate from "@hapi/joi-date";
const Joi = JoiBase.extend(JoiDate); // extend Joi with Joi Date
document.getElementById("app").innerHTML = `
<h1>Hello Vanilla!</h1>
<div>
We use Parcel to bundle this sandbox, you can find more info about Parcel
<a href="https://parceljs.org" target="_blank" rel="noopener noreferrer">here</a>.
</div>
`;
export const dateRequired = (keys, message) => {
return Joi.object().pattern(
Joi.valid(keys),
Joi.date()
.format("DD/MM/YYYY") // set desired date format here
.raw()
.error(() => "message")
);
};
const state = {
numberField: "14/09/1995" // "14/9/1995" will fail without leading "0" on 09
};
const schema = dateRequired(["numberField"]);
const valid = Joi.validate(state, schema); // "valid" is a promise
valid
.then(res => {
console.log("SUCCESS", res);
})
.catch(e => {
console.log("ERROR", e.toString());
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.