是否有可能为内置的 "验证错误信息 "提供自定义验证错误信息?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
的错误信息,你需要捕捉到错误,检查是什么错误,然后返回抛出所需的响应信息。这样做的一个好地方是 .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)")
}