可验证模型的自定义验证错误消息
Custom validation error message for Validatable model
是否可以为内置 Validatable
协议提供自定义验证错误消息?
我有这个验证:
static func validations() throws -> Validations<NewsletterListItem> {
var validations = Validations(NewsletterListItem.self)
validations.add(\.email, at: ["email"], .email)
return validations
}
它会产生这条消息:
{
"error": true,
"reason": "duplicate key value violates unique constraint \"uq:newsletter_list.email\""
}
...我想改进。
事实证明,Validatable
仅添加了约束,但并未自行验证它们。因此,不是向 Validatable
提供错误消息,而是需要捕获错误,检查错误是什么,然后 return/throw 所需的响应消息。这样做的好地方是对模型的 .save()
调用:
以下示例位于 POST /subscribe-to-newsletter
的路由处理程序中:
return try item.save(on: req).catchMap { error in
if error.localizedDescription.contains("uq:newsletter_list.email") {
throw Abort(.ok, reason: "You're already subscribed to newsletter")
}
throw Abort(.badRequest, reason: "error: \(error.localizedDescription)")
}
是否可以为内置 Validatable
协议提供自定义验证错误消息?
我有这个验证:
static func validations() throws -> Validations<NewsletterListItem> {
var validations = Validations(NewsletterListItem.self)
validations.add(\.email, at: ["email"], .email)
return validations
}
它会产生这条消息:
{ "error": true, "reason": "duplicate key value violates unique constraint \"uq:newsletter_list.email\"" }
...我想改进。
事实证明,Validatable
仅添加了约束,但并未自行验证它们。因此,不是向 Validatable
提供错误消息,而是需要捕获错误,检查错误是什么,然后 return/throw 所需的响应消息。这样做的好地方是对模型的 .save()
调用:
以下示例位于 POST /subscribe-to-newsletter
的路由处理程序中:
return try item.save(on: req).catchMap { error in
if error.localizedDescription.contains("uq:newsletter_list.email") {
throw Abort(.ok, reason: "You're already subscribed to newsletter")
}
throw Abort(.badRequest, reason: "error: \(error.localizedDescription)")
}