Swift 通过移除'简化Kitura RouterHandler;下一个';关闭?

Swift 通过移除'简化Kitura RouterHandler;下一个';关闭?,swift,webserver,kitura,Swift,Webserver,Kitura,我在和Kitura玩。我安装了一个路由器端点,看起来像: 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\"

我在和Kitura玩。我安装了一个路由器端点,看起来像:

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
closure/callback参数感到困惑/沮丧。许多(可能过时了?)教程没有提到或包含它,但如果我不调用它,我的路由器将挂起,客户端响应将永远不会发送


我有没有办法避免在我的
RouterHandler
中调用它?还是自动呼叫?在每个方法中都需要手动执行此回调,这似乎是一个巨大的潜在人为错误源,并且会增加混乱。(其他框架如SpringWeb自动执行链,不需要调用
next()

发送响应后,您可以调用
response.end()
,在这种情况下,您不需要调用next()。next()用于提供灵活性,以便可以根据需要调用或跳过后续处理程序

但您提出了一个很好的观点,自动调用next()可能更直观,除非显式设置了一个标志以跳过后续处理程序,我们将对此进行研究。谢谢


在查看代码时,Kitura的回退处理(如果没有被任何处理程序调用,则调用
response.end()
)依赖于调用的next(),而实际上不应该这样。我要换个地方来解决这个问题。再次感谢您提出这个问题。

啊,谢谢-我会试试这个。我觉得奇怪的是,IBM网站上的偶数教程没有包含
.end()
,也没有调用
next()
:我们对Kitura 1.6.1做了一个更改,如果所有处理程序都完成了而没有显式结束响应,那么将结束响应。这将防止其他人遇到您遇到的问题。谢谢