【问题标题】:How to validate for ObjectID如何验证 ObjectID
【发布时间】:2019-12-30 16:50:14
【问题描述】:

使用 Joi 模式验证,是否可以针对 MongoDB ObjectID 进行验证?

这样的事情可能很棒:

_id: Joi.ObjectId().required().error(errorParser),

【问题讨论】:

  • 据我所知,你可以做 Joi.objectId().required()
  • @whoami-fakeFaceTrueSoul 它抛出错误: 必须是字符串
  • @AmirMeyari String inside ObjectId()_id 应该是一个有效的(docs.mongodb.com/manual/reference/method/ObjectId/#objectid)!!打印值并检查即将到来的内容!

标签: mongodb joi objectid


【解决方案1】:
const Joi = require('@hapi/joi')
Joi.objectId = require('joi-objectid')(Joi)
 
const schema = Joi.object({
  id: Joi.objectId(),
  name: Joi.string().max(100),
  date: Joi.date()
})

结帐https://www.npmjs.com/package/joi-objectid

【讨论】:

  • 这适用于Joi(“裸”版)吗?因为@hapi/joi 已被弃用。
【解决方案2】:

如果你使用的是新版本的 Joi,这个包可以工作。

const Joi = require('joi-oid')

const schema = Joi.object({
  id: Joi.objectId(),
  name: Joi.string(),
  age: Joi.number().min(18),
})

包:https://www.npmjs.com/package/joi-oid

【讨论】:

  • 这实际上是一个包含 ObjectIds 正则表达式的整个 NPM 库吗?
  • 我不确定你到底在说什么,但我的意思是人们不应该下载整个包而不是使用简单的正则表达式。
  • 无需下载。代码在github上。任何人都可以在没有包装的情况下使用它。 :)
【解决方案3】:

如果你想在不安装任何东西的情况下将上述库的 TypeScript 版本与 Express 集成:

import Joi from '@hapi/joi';
import { createValidator } from 'express-joi-validation';

export const JoiObjectId = (message = 'valid id') => Joi.string().regex(/^[0-9a-fA-F]{24}$/, message)

const validator = createValidator({
    passError: true,
});

const params = Joi.object({
    id: JoiObjectId().required(),
});

router.get<{ id: string }>(
    '/:id',
    validator.params(params),
    (req, res, next) => { 
       const { id } = req.params; // id has string type
       .... 
    }
);

【讨论】:

  • 这应该是公认的答案。一个简单的 RegEx 模式,而不是一个完整的附加库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-16
  • 2023-02-14
  • 2020-05-22
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多