Pokúsim sa napísať obslužný program žiadosti pre túto žiadosť:
POST -> /properties/{:propertyId}/issues
Obsluha by mala vytvoriť nové vydanie pre vlastníctvo pomocou propertyId
.
Trasu som zaregistroval takto:
router.post(Issue.self, at: "properties", Int.parameter, "issues", use: createIssueHandler)
Ako by som napísal psovodovi, aby vzal propertyId
z parametrov žiadosti, namiesto toho, aby sa vyžadovala v tele 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)
}
odpovede:
0 pre odpoveď č. 1kredit na @AxelCB z chatu Discord Discord
ak vlastnosť vyhovuje parametru, môžete urobiť:
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)
}
}
Ak to, čo pošlete parameters.next
je model a ďalší parameter je rovnaký typ ako ID tohto modelu, pokúsi sa nájsť model s týmto ID a vyhodiť nejaké chyby, ak sa nenájde