我在Kitura有一个TypeSafe可编码路由定义如下:
app.router.post("/games") { (auth: BasicAuth, respondWith: @escaping (Game?, RequestError?) -> ()) in
...
}
但是当我提出请求时,我会收到Could not decode received JSON: The required key 'id' not found.
。这似乎是路由器试图从POST主体而不是从基本的auth头解析auth
对象。如果我改变路由到GET它工作得很好,但我不太了解类型安全可编码路由,我很困惑POST路由改变了什么。如何让我的BasicAuth
与POST一样工作与GET一样?
使用Kitura的Codable Routing时,POST处理程序期望从消息体接收Codable输入。您可以选择指定一个或多个TypeSafeMiddleware要求。
如果要执行POST,则需要匹配带有Codable和TypeSafeMiddleware作为输入的the post() function on Router:
app.router.post("/games") { (auth: BasicAuth, input: MyInputType, respondWith: @escaping (Game?, RequestError?) -> ()) in
...
}
在您的情况下发生的是您实际上匹配this post() function without TypeSafeMiddleware,其中您的auth类型(符合Codable)被解释为您的输入类型。
如果您不希望将有效负载POST到服务器以获取此请求,那么您可能需要的是GET,而是匹配仅将TypeSafeMiddleware作为输入的the get() function on Router:
app.router.get("/games") { (auth: BasicAuth, respondWith: @escaping (Game?, RequestError?) -> ()) in
...
}
请注意,TypeSafeMiddleware是路由处理程序的第一个参数,后跟任何其他输入类型(在PUT或POST的情况下)。