Как обработать POST-запрос для отношения один ко многим в Vapor 3.0? - PullRequest
0 голосов
/ 16 мая 2018

Попытка написать обработчик запроса для следующего запроса:

POST -> /properties/{:propertyId}/issues

Обработчик должен создать новый выпуск для свойства с propertyId.

Я зарегистрировал маршрут так:

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

Как мне написать обработчик для получения propertyId из параметров запроса, а не требовать его в теле JSON?

func createIssueHandler(_ req: Request, data: Issue) throws -> Future<Issue> {
    let propertyId = try req.parameters.next(Int.self)
    let issue = Issue(
        title: data.title, 
        description: data.description,
        propertyId: propertyId
    )
    return issue.save(on: req)
}

1 Ответ

0 голосов
/ 16 мая 2018

кредит @AxelCB из чата Vapor's Discord

, если свойство соответствует параметру, вы можете сделать:

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, является моделью, иСледующий параметр того же типа, что и идентификатор этой модели, он попытается найти вашу модель с этим идентификатором и выдаст ошибку, если она не найдена

...