我正在开发一个 Nest 项目,并使用类验证器进行验证。
目前,如果有任何验证错误,我收到的错误响应为
{
"statusCode": 400,
"message": [
"Title is too long. Maximal length is 50 characters, but actual is $value",
"Title is too short. Minimal length is 10 characters, but actual is $value"
],
"error": "Bad Request"
}
但是我们可以将消息作为对象数组,而不是字符串数组。因此,FE 可以轻松找出哪个字段出现错误,例如
{
"message": [
{ "field": "title", "error": "Title is too long. Maximal length is 50 characters, but actual is $value" },
{ "field": "title", "error": "Title is too short. Minimal length is 10 characters, but actual is $value" }
]
}
您可以在 NestJS 中使用异常过滤器来处理或添加自定义的用户友好响应。
但是,对于类验证器,通过在validationPipe中使用exceptionFactory()来修改类验证器返回的错误有相同的机制,这里是一个示例代码:
app.useGlobalPipes(
new ValidationPipe({
exceptionFactory: (validationErrors: ValidationError[] = []) => {
return new BadRequestException(
validationErrors.map((error) => ({
field: error.property,
error: Object.values(error.constraints).join(', '),
})),
);
},
}),
);
希望它对你有用!
您可以实现与默认 ValidationPipe 类似的错误输出:
if (errors) {
const errorMessages = [];
errors.forEach((error) =>
Object.entries(error.constraints).forEach((elt) =>
errorMessages.push(elt[1]),
),
);
throw new BadRequestException(errorMessages);
}
输出如下所示:
{
"message": [
"title should not be empty",
"title must be a string",
"ai_subject must be a string"
],
"error": "Bad Request",
"statusCode": 400
}