[英]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();
}
};
我需要驗證startDate
和endDate
字段應該是格式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
(無論如何這是默認值)並且您不需要在startDate和endDate上調用string(false)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.