【问题标题】:How to format and validate birth date node js如何格式化和验证出生日期节点js
【发布时间】:2019-02-27 03:17:48
【问题描述】:

我希望用户年满 18 岁。所以输入的出生日期应该 > 18 岁。

最好的方法是什么?

我有一个注册组件,我有这样的字段:

<mat-form-field id="birth-date">
              <input matInput [matDatepicker]="picker" placeholder="mm/dd/yy" name="birthDate" [(ngModel)]="birthDate">
              <mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
              <mat-datepicker #picker></mat-datepicker>
</mat-form-field>

在我的 usersRouter 我有注册功能:

router.post('/users/register', (req, res) => {
        ...
        const user = new User({
            ...
            birthDate: req.body.birthDate,
            ...
        });
     ...
});

另外,我使用 mongo,在 UserSchema 中我有这个作为出生日期:

birthDate: {
        type: Date,
        required: true
}

谢谢!

【问题讨论】:

  • 你在用猫鼬吗?
  • 是的,我正在使用它

标签: node.js angular validation date express


【解决方案1】:

您可以在 mongoose 中编写自定义验证器

birthDate: {
        type: Date,
        validate: {
          validator: function(v) {
            v.setFullYear(v.getFullYear()+18)
            const currentTime = new Date();
            currentTime.setHours(0,0,0,0);
            return v.getTime() <= currentTime.getTime();
          },
          message: props => 'You must be 18 years old.'
        },
        required: true
    }

参考:https://mongoosejs.com/docs/validation.html

【讨论】:

    【解决方案2】:

    为此使用时刻。当您使用 nodeJs 时,它应该相当容易。 https://momentjs.com/ 。您可以像这样在路由器中使用它

    var years = moment().diff(req.body.birthDate, 'years');
    

    现在检查年份是否超过 18。如果不是,则在小于 18 的情况下向用户返回错误。但最好是在前端检查它并在可能的情况下在那里给出错误。

    【讨论】:

      猜你喜欢
      • 2019-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-19
      • 2021-05-29
      • 2016-05-11
      相关资源
      最近更新 更多