gpt4 book ai didi

swift - 从数据库加载数据并将其加载到 Vapor 3 View 中的正确方法?

转载 作者:行者123 更新时间:2023-11-30 11:32:47 24 4
gpt4 key购买 nike

我有一个 Vapor 3 项目,可以上传一些 html 格式的内容字符串。并具有将此内容加载为 html 页面的功能。代码如下:

func newpost(_ reqest: Request) throws -> Future<View> {
self.getContent(req: reqest) { (content) in
return try reqest.view().render("newpost.leaf", content)
}

}

func getContent(req:Request, callback: @escaping (String) -> ()) {
let _ = BlogModel.query(on: req).first().map(to: BlogModel.self) { (blog) -> (BlogModel) in
callback((blog?.content)!)
return blog!
}
}

但是这段代码会导致错误:

Invalid conversion from throwing function of type '(_) throws -> _' to non-throwing function type '(String) -> ()'

如果我尝试return try reqest.view().render("newpost.leaf", content) out site the block,那么我无法获取内容。请帮助我找到正确的加载方法。

最佳答案

您应该看看 Async section在文档中( promise 等)。无需使用回调。

这可能是从数据库获取数据并使用 Leaf 呈现数据的一种方法(与您的代码的想法相同,但用 Promises 替换回调并清理不必要的代码):

enum APIError: AbortError {
case dataNotFound
}

/// Render the HTML string using Leaf
func newPost(_ req: Request) throws -> Future<View> {
return getContent(req)
.flatMap(to: View.self) { model in
// By default, Leaf will assume all templates have the "leaf" extension
// There's no need to specify it
return req.view().render("newpost", model)
}
}

/// Retrieve X content from the DB
private func getContent(_ req: Request) throws -> Future<BlogModel> {
return BlogModel.query(on: req)
.first() // can be nil
.unwrap(or: APIError.dataNotFound)
// returns an unwrapped value or throws if none
}

如果你不想在没有找到数据时抛出异常,你可以使用 nil-coalescing 将 nil 转换为空字符串。

关于swift - 从数据库加载数据并将其加载到 Vapor 3 View 中的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50083628/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com