[英]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.