簡體   English   中英

如何正確格式化JOI日期/模式?

[英]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());
      });

https://codesandbox.io/embed/prod-grass-f95sz

暫無
暫無

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

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