1

我在和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闭包/回调参数感到非常困惑/沮丧。许多(可能已经过时?)教程没有提及或包含它,但如果我不调用它,我的路由器就会挂起并且永远不会发送客户端响应。

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

4

1 回答 1

3

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

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

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

于 2017-02-11T16:48:43.313 回答