簡體   English   中英

如何在節點 JS 中使用 Joi 驗證 req.body 是否具有有效的日期字符串

[英]How can I validate that req.body has a valid date string using Joi in node JS

我制作了一個驗證中間件,其代碼如下所示。

export const validateMiddleware = async (req, res, next) => {

    const validateExpression = Joi.object()
        .keys({
            'startDate': Joi.string()
                .optional()
                .allow(''),
             'endDate': Joi.string()
                 .optional()
                 .allow('')
        });

    const {
        error
    } = validateExpression.validate(req.query, {
        'convert': false,
        'abortEarly': false
    });

    if (error) {
       // Return response regarding that error.
    } else {
        next();
    }
};

我需要驗證startDateendDate字段應該是格式YYYY-MM-DD字符串,還需要驗證startDate < endDate日期值。 如何在 Node JS 中使用 Joi 來實現這一點?

我認為這段代碼將解決您的問題:

const validateExpression = Joi.object()
  .keys({
    'startDate': Joi.date()
      .format("YYYY-MM-DD")
      .optional()
      .allow(''),
    'endDate': Joi.date()
      .format("YYYY-MM-DD")
      .optional()
      .allow('')
      .min(Joi.ref('startDate'))
  });

嘗試這個:


const Joi = require("joi").extend(require("@joi/date"));


export const validateMiddleware = async (req, res, next) => {

    const validateExpression = Joi.object()
        .keys({
            'startDate': Joi.date()
                .format("YYYY-MM-DD")
                .strict(false) // required if 'convert' option is set to "false"
                .optional()
                .allow(''),
             'endDate': Joi.date()
                .format("YYYY-MM-DD")
                .greater(Joi.ref("startDate")) // checks if it is greater than startDate, throws error if now.
                .strict(false) // can be omitted if 'convert' option is set to "true"
                .optional()
                .allow('')
        });

    const {
        error
    } = validateExpression.validate(req.query, {
        'convert': false,
        'abortEarly': false
    });

    if (error) {
       // Return response regarding that error.
    } else {
        next();
    }
};

不要忘記調用strict(false) 否則將日期作為字符串傳遞將不起作用,因為您有'convert': false 或者,您可以設置'convert': true (無論如何這是默認值)並且您不需要在startDateendDate上調用string(false)

暫無
暫無

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

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