无法在页面上执行beforeEncode和afterDecode

问题描述

我有一个Post设置为beforeEncode的模型:@H_502_5@

extension Post {
    func beforeEncode() throws {
        print("1")
    }
}

当我的路线返回PostEventLoopFuture<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)
}

12均未打印到控制台。@H_502_5@

我该如何做才能在页面的每个帖子上执行beforeEncode方法?@H_502_5@

为什么调用beforeEncode认实现而不是我自己的Page扩展名添加认实现?@H_502_5@

(我知道我可以映射EventLoopFuture并在页面的每个项目上手动调用beforeEncode,但这不是我想要的)@H_502_5@

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)