【问题标题】:How could I validate dates correctly?如何正确验证日期?
【发布时间】:2020-04-22 23:34:26
【问题描述】:

我正在使用庆祝来验证日期,但我仍然可以添加一个高于结束日期的开始日期,我可以做些什么来防止这种行为?同样使用这样的格式会返回以下错误:

Unknown date format YYYY-MM-DD

如何使用所需的格式?

routes.post(
  '/world_series',
  celebrate({
    [Segments.BODY]: Joi.object().keys({
      start_date: Joi.date().required(),
      end_date: Joi.date().format('YYYY-MM-DD').greater(Joi.ref('start_date')).required(),
      champion_id: Joi.string().required(),
      runners_up_id: Joi.string().required(),
    }),
  }),
  WorldSeriesController.create
);

【问题讨论】:

  • moment js 是一个很好的关于日期相关操作的库。你可以尝试使用它。 npmjs.com/package/moment
  • (最小的)庆祝文档列出了允许的格式字符串here,允许的值为日期、iso、字符串、时间、UTC。相关的注释显示了对一般日期的理解很差,特别是对 ECMAScript 日期的理解。我以前使用过JSONschma,它似乎工作正常,并且允许更多的验证选项。有很多在线工具可用于创建和测试架构。

标签: javascript node.js express date joi


【解决方案1】:

阅读文档后,我发现我可以使用规则集来解决我的问题,代码如下:

routes.post(
  '/world_series',
  celebrate({
    [Segments.BODY]: Joi.object().keys({
      start_date: Joi.date().required(),
      end_date: Joi.date()
        .ruleset.greater(Joi.ref('start_date'))
        .rule({ message: 'end_date must be greater than start_date' })
        .required(),
      champion_id: Joi.string().required(),
      runners_up_id: Joi.string().required(),
    }),
  }),
  WorldSeriesController.create
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    相关资源
    最近更新 更多