节点使用 AJV 验证请求参数

问题描述 投票:0回答:2

我正在创建一个接受请求参数的 API,我想验证该参数是否是有效的 mongo ObjectId。

API 签名:- https://example.com/test/:id

想要检查 id 是否是对象 id

PS - 我正在使用 AJV 中间件来验证

node.js validation json-schema-validator ajv
2个回答
0
投票

AJV 不支持自定义验证,请检查此 https://github.com/ajv-validator/ajv/issues/967#issuecomment-470428858

但是您可以使用自己的正则表达式来验证 objectId:

user_id: {type: 'string', pattern: '^[a-f\\d]{24}$'},

完整的示例可以是:

{
    type: 'object',
    properties: {
      user_id: {type: 'string', pattern: '^[a-f\\d]{24}$'},
    },
}

0
投票

您可以通过向 ajv 添加自定义格式来完成此操作。

下面的代码就可以做到这一点。

const { ObjectId } = require('mongodb');
const Ajv = require('ajv').default;
const ajv = new Ajv({ allErrors: true });
ajv.addFormat('objectid', {
  type: 'string',
  validate: (data) => {
    return ObjectId.isValid(data);
  },
});

然后在您的架构文件中,您可以添加如下内容,

"userId": {
  "type": "string",
  "format": "objectid",
},
© www.soinside.com 2019 - 2024. All rights reserved.