Swift Vapor 3从另一个路由器内部呼叫路由器
我使用Vapor 3开发了一个服务器应用程序,我设置了三个模型Book、Author、Publisher、具有CRUD和关系的相关路由器和控制器(Author和Publisher都与Book有兄弟关系)。 如果没有传入的数据,一切都会好起来:我收到的Json具有不同的数据结构,出版商和作者存储在书中的数组中 我无法在Book.self上解码,因为我会丢失与出版商和作者相关的数据,因此我创建了BookTotal,它在数据库中没有表示(没有迁移),因此我可以Swift Vapor 3从另一个路由器内部呼叫路由器,swift,vapor,Swift,Vapor,我使用Vapor 3开发了一个服务器应用程序,我设置了三个模型Book、Author、Publisher、具有CRUD和关系的相关路由器和控制器(Author和Publisher都与Book有兄弟关系)。 如果没有传入的数据,一切都会好起来:我收到的Json具有不同的数据结构,出版商和作者存储在书中的数组中 我无法在Book.self上解码,因为我会丢失与出版商和作者相关的数据,因此我创建了BookTotal,它在数据库中没有表示(没有迁移),因此我可以 req.content.decode(B
req.content.decode(BookTotal.self).flatMap
此时,我想在传递BookTotal.Publisher和BookTotal.Author数组的Publisher和Author控制器上调用save或update函数
但是,虽然我可以通过以下方法来达到目的
`PublisherController.Save()`
或
我不知道如何把数据传给他们。控制器中的CRUD方法将请求作为参数,但我不知道如何构建一个
let newReq = Request()
newReq.content = BookTotal.Author
这是我的猜测,但请求需要一个容器,我不知道该怎么做。
我四处搜索,但找不到任何关于此类问题的示例/教程。
我这样做对吗?所以你有两个选择来实现你想要做的事情。一个选项是重写控制器中的请求处理程序,以使用一个helper函数接受该数据。所以
func savePublisher(\req:Request,data:Publisher)抛出->未来
然后,您可以将router.post(“您的”、“url”,使用:savePublisher)
更改为router.post(Publisher.self,在:“您的”、“url”,使用:savePublisher)
。然后,如果您的代码不正确,您可以调用该方法并根据需要传递数据
(可能)更好的方法是将保存发布者的代码提取到一个单独的函数中,然后可以从
savePublisher
路线和bookTotal
路线调用该函数。对于基本路线,这可能与第一个选项相同,但对于最复杂的路线,这是一条可行之路。首先,谢谢您,谢谢您的回答。我还必须说,我觉得自己很傻,没有看到如此简单的解决方案。。。现在你向我指出这一点似乎很明显。关于您的第二个选项,我简单地尝试了一些类似的方法,但由于.save()方法需要DatabaseConnectablepublisher.save(on:req)这一事实,我被耽搁了
通常,我不知道是否应该传递原始请求或什么。我会一直传递请求
——这是我通常做的事情,除非我正在编写一个不一定与请求相关的函数(通常在库中)。但是,如果您正在为自己的应用程序编写函数,只需使用Request
let newReq = Request()
newReq.content = BookTotal.Author