【问题标题】:How to use objectId validation in joiful?如何在joiful中使用objectId验证?
【发布时间】:2020-02-16 01:52:31
【问题描述】:

我尝试使用 mongodb objectId 进行 joiful 验证。但是它的抛出错误 Property 'ObjectId' does not exist on type 'typeof import("/home/lenovo/Music/basic/node_modules/joiful/index")'

import * as jf from "joiful";
import {ObjectId} from 'mongodb';
class SignUp {
    @jf.string().required()
    username?: string;

    @jf
        .string()
        .required()
        .min(8)
    password?: string;

    @jf.date()
    dateOfBirth?: Date;

    @jf.boolean().required()
    subscribedToNewsletter?: boolean;

    @jf.ObjectId().required()
    id?:ObjectId;
}

const signUp = new SignUp();
signUp.username = "rick.sanchez";
signUp.password = "wubbalubbadubdub";

const { error } = jf.validate(signUp);

是否可以使用 joiful 验证 objectId。

【问题讨论】:

    标签: node.js validation joi


    【解决方案1】:

    我知道这个问题是很久以前的事了,库维护者还没有添加这个验证器,为此我创建了一个自定义装饰器,它使用joiful 自定义方法进行自定义验证

    import * as jf from 'joiful';
    import Joi from 'joi';
    import { ObjectId } from 'mongodb';
    
    export const objectIdValidationDecorator = () => jf.any().custom(({ schema }: { schema: Joi.Schema }) => {
      return schema.custom((value, helpers) => {
        const objectId = new ObjectId(value);
        if (objectId.equals(value)) {
          return objectId;
        } else {
          return helpers.error('any.invalid');
        }
      });
    })
    

    用法:

    class MyObj {
      @objectIdValidationDecorator().required()
      referenceId:ObjectId
    }
    

    【讨论】:

      猜你喜欢
      • 2019-12-30
      • 1970-01-01
      • 1970-01-01
      • 2023-02-14
      • 1970-01-01
      • 2020-05-22
      • 2021-06-28
      • 2022-01-15
      • 1970-01-01
      相关资源
      最近更新 更多