Skip to content

Commit ade7f30

Browse files
committed
replace to AsyncMiddleware struct
1 parent 6c28167 commit ade7f30

File tree

1 file changed

+25
-11
lines changed

1 file changed

+25
-11
lines changed

Sources/App/Middlewares/CommonErrorMiddleware.swift

+25-11
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import Vapor
22

3-
final class CommonErrorMiddleware: Middleware {
4-
func respond(to request: Request, chainingTo next: Responder) -> EventLoopFuture<Response> {
5-
return next.respond(to: request).flatMapError { (error) in
3+
struct CommonErrorMiddleware: AsyncMiddleware {
4+
func respond(to request: Vapor.Request, chainingTo next: any Vapor.AsyncResponder) async throws -> Vapor.Response {
5+
do {
6+
return try await next.respond(to: request)
7+
} catch let error {
68
let headers: HTTPHeaders
79
let status: HTTPResponseStatus
810
switch error {
@@ -33,16 +35,28 @@ final class CommonErrorMiddleware: Middleware {
3335
]
3436

3537
if request.headers[.accept].map({ $0.lowercased() }).contains("application/json") {
36-
return request.eventLoop.makeSucceededFuture(["error": status.code])
37-
.encodeResponse(status: status, headers: headers, for: request)
38+
let data = try JSONEncoder().encode(["error": status.code])
39+
40+
return .init(
41+
status: status,
42+
headers: headers,
43+
body: .init(data: data)
44+
)
3845
} else {
39-
return request.view.render("error", [
40-
"title": "We've got some trouble",
41-
"error": errotTitles[status.code],
42-
"reason": errotReasons[status.code],
43-
"status": "\(status.code)",
46+
let data = try JSONEncoder().encode([
47+
"error": [
48+
"title": "We've got some trouble",
49+
"error": errotTitles[status.code],
50+
"reason": errotReasons[status.code],
51+
"status": "\(status.code)",
52+
]
4453
])
45-
.encodeResponse(status: status, headers: headers, for: request)
54+
55+
return .init(
56+
status: status,
57+
headers: headers,
58+
body: .init(data: data)
59+
)
4660
}
4761
}
4862
}

0 commit comments

Comments
 (0)