无法在页面上执行beforeEncode和afterDecode

问题描述

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

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

当我的路线返回PostEventLoopFuture<Post>时,此方法可以正常工作。 1被打印到控制台。返回EventLoopFuture<Page<Post>>时它不起作用,因此永远不会打印1

我认为这是因为页面的帖子从未得到编码,而是页面本身,所以我扩展了Page

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认实现会执行:

app.get("route") { (request: Request) -> EventLoopFuture<Page<Post>> in
    return Post.query(on: request.db).paginate(for: request)
}

12均未打印到控制台。

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

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

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

解决方法

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

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...