我正在创建一个接受请求参数的 API,我想验证该参数是否是有效的 mongo ObjectId。
API 签名:- https://example.com/test/:id
想要检查 id 是否是对象 id
PS - 我正在使用 AJV 中间件来验证
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}$'},
},
}
您可以通过向 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",
},