Я играю с Китурой. Я установил один маршрутизатор конечную точку, которая выглядит следующим образом:Упростить Kitura RouterHandler, удалив «следующее» закрытие?
let router = Router()
router.all() { _, response, next in
response.headers["Content-Type"] = "application/json; charset=utf-8"
next()
}
router.get("/hello") { _, response, next in
response.send("{\"message\": \"Hello World\"}")
next()
}
Kitura.addHTTPServer(onPort: 9143, with: router)
print("Application Server Starting...")
Kitura.run()
Я действительно путают/разочарование этим next
закрытия/параметра обратного вызова. Многие (возможно устаревшие?) Учебники не упоминают и не включают в себя, но если я его не назову, мой маршрутизатор зависает, а ответ клиента никогда не отправляется.
Есть ли способ для меня избежать необходимости называть это в моем RouterHandler
? Или это называется автоматически? Кажется, огромным источником потенциальной человеческой ошибки необходимо вручную выполнить этот обратный вызов в каждом методе, и это добавляет беспорядок. (Другие структуры, такие как Spring Web, выполняют цепочку автоматически, нет необходимости в вызове next()
.)
А, спасибо - я попробую это. Мне показалось странным, что даже учебники на веб-сайте IBM не включают '.end()', * или * вызов 'next()': https://developer.ibm.com/swift/2016/02/ 22/building-end-end-cloud-apps-using-swift-kitura/ –
Мы внесли изменения в Kitura 1.6.1, которые завершат ответ, если все обработчики закончатся, не закончив его явно. Это должно помешать другим столкнуться с проблемой, с которой вы столкнулись. Благодаря! – Navneet