如何在Vapor 3.0中处理一对多关系的POST请求?

时间:2018-05-16 14:52:33

标签: swift rest vapor

尝试为以下请求编写请求处理程序:

POST - > params

处理程序应使用filter: { content_type: "thumbnail", fields.thumbnailType.fields.type[match]: "News & Press", fields.thumbnailType.sys.contentType.sys.id: "thumbnailType" } 为该属性创建一个新问题。

我已经注册了这样的路线:

/properties/{:propertyId}/issues

如何编写处理程序以从请求参数中获取propertyId,而不是在JSON正文中要求它?

router.post(Issue.self, at: "properties", Int.parameter, "issues", use: createIssueHandler)

1 个答案:

答案 0 :(得分:0)

从Vapor的Discord聊天中获得@AxelCB

如果Property符合Parameter,你可以这样做:

router.post(Issue.self, at: "properties", Property.parameter, "issues", use: createIssueHandler)

func createIssueHandler(_ req: Request, data: Issue) throws -> Future<Issue> {
    try req.parameters.next(Property.self).flatMap(to: Issue.self) { property -> Future<Issue> in
        data.propertyId = property.id
        return issue.save(on: req)
    }
}

如果您在parameters.next中发送的内容是模型,并且下一个参数与该模型的ID类型相同,则会尝试使用该ID查找您的模型,如果找不到它