作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在和 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() 用于提供灵 active ,以便可以根据需要调用或跳过后续处理程序。
但是你提出了一个很好的观点,自动调用 next() 可能更直观,除非明确设置标志以跳过后续处理程序,我们将研究它。谢谢!
在查看代码时,Kitura 的后备处理(如果未被任何处理程序调用,则调用 response.end()
)似乎依赖于 next() 的调用,这真的不应该。我会进行更改以解决该问题。再次感谢您提出这个问题。
关于swift - 通过删除 'next' 闭包来简化 Kitura RouterHandler?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42176639/
我在和 Kitura 一起玩。我已经安装了一个看起来像这样的路由器端点: let router = Router() router.all() { _, response, next in r
我是一名优秀的程序员,十分优秀!