[英]Vapor 3: Create Custom Server Response
我想为我的控制器和我的错误创建一个自定义服务器响应。
这是 model:
struct ServerResponse<T: Content>: Content {
let code: Int
let message: String
let data: T?
}
我的创建请求:
func create(_ req: Request) throws -> Future<ServerResponse<User>> {
try req.content.decode(User.self).flatMap { user in
user.save(on: req).map { user in
ServerResponse(code: ?, message: ?, data: user)
}
}
}
如果成功,如何获取HTTPStatus
代码以将其添加到响应中?
如果成功是OK
的消息,如果错误是自定义描述或HTTPStatus
的描述。
Content
协议符合ResponseCodable
协议,而 ResponseCodable 协议又符合ResponseEncodable
协议。 Vapor 使用ResponseEncodable
协议将类型转换为可以发送给客户端的EventLoopFuture<Response>
。
您要做的是定义ResponseEncodable
所需的encode(for:)
方法的自定义实现。 它看起来像这样:
func encode(for request: Request) -> Future<Response> {
do {
let response = Response(status: HTTPResponseStatus(statusCode: self.code))
try response.content.encode(self.data)
return request.eventLoop.future(response)
} catch let error {
return request.eventLoop.future(error: error)
}
}
我真的不知道你打算如何使用message
属性,所以我把它省略了。
作为旁注,您可能只需要使您的自定义类型符合ResponseEncodable
而不是Content
,但这不会有很大的不同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.