如何在欢乐中使用objectId验证?

时间:2019-10-19 07:27:56

标签: node.js validation joi

我尝试使用mongodb objectId进行轻松的验证,但其抛出错误类型'import'类型上不存在属性'ObjectId'(“ / 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);

是否可以使用快乐来验证objectId。

1 个答案:

答案 0 :(得分:0)

我知道这个问题是很久以前的,库维护者还没有添加这个验证器,为此我创建了一个自定义装饰器,它使用 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
}