问题描述
我有一个Post
设置为beforeEncode
的模型:@H_502_5@
extension Post {
func beforeEncode() throws {
print("1")
}
}
当我的路线返回Post
或EventLoopFuture<Post>
时,此方法可以正常工作。 1
被打印到控制台。返回EventLoopFuture<Page<Post>>
时它不起作用,因此永远不会打印1
。@H_502_5@
我认为这是因为页面的帖子从未得到编码,而是页面本身,所以我扩展了Page
:@H_502_5@
extension Page where T: Content {
mutating func beforeEncode() throws {
print("2")
self = try self.map { (item: T) throws -> T in
var item: T = item
try item.beforeEncode()
return item
}
}
}
这也不会执行,但是在调用以下路由时,beforeEncode
的默认实现会执行:@H_502_5@
app.get("route") { (request: Request) -> EventLoopFuture<Page<Post>> in
return Post.query(on: request.db).paginate(for: request)
}
1
和2
均未打印到控制台。@H_502_5@
我该如何做才能在页面的每个帖子上执行beforeEncode
方法?@H_502_5@
为什么调用beforeEncode
的默认实现而不是我自己的Page
扩展名添加的默认实现?@H_502_5@
(我知道我可以映射EventLoopFuture
并在页面的每个项目上手动调用beforeEncode
,但这不是我想要的)@H_502_5@
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)