首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过删除‘RouterHandler’闭包来简化Kitura?

通过删除‘RouterHandler’闭包来简化Kitura?
EN

Stack Overflow用户
提问于 2017-02-11 21:51:16
回答 1查看 273关注 0票数 1

我在和Kitura玩。我安装了一个路由器端点,如下所示:

代码语言:javascript
复制
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()调用。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-12 00:48:43

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

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

仔细查看代码,就会发现Kitura的回退处理(如果没有被任何处理程序调用,就会调用response.end() )依赖于被调用的next(),而这实际上不应该被调用。我会放入一个改变来解决这个问题。再次感谢你提出这个问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42176639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档