通过删除'next'关闭来简化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": "Hello World"}")
    next()
}
Kitura.addHTTPServer(onPort: 9143, with: router)
print("Application Server Starting...")
Kitura.run()

我对这个next关闭/回调参数感到非常困惑/沮丧。许多(也许已经过时了?(教程没有提到或包含它,但如果我不调用它,我的路由器就会挂起,客户端响应永远不会发送。

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

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

但是你提出了一个很好的观点,除非明确设置了一个标志来跳过后续处理程序,否则自动调用 next(( 可能会更直观,我们将对其进行研究。谢谢!

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

最新更新