如何为相同的资源使用多个路由

Posted

技术标签:

【中文标题】如何为相同的资源使用多个路由【英文标题】:How to use multiples routes for same resources 【发布时间】:2021-04-21 10:34:46 【问题描述】:

我在 Ktor 中有许多相同资源的 URI。为了避免重复太多行,我找到了这个解决方案:

routing 

    get("/", home())
    get("/index", home())
    get("/home", home())

    ...
    


private fun home(): suspend PipelineContext<Unit, ApplicationCall>.(Unit) -> Unit =
    
        val parameters = ...
        call.respond(ThymeleafContent("/index.html", parameters))
    

有没有像这样更优雅的解决方案:

routing 

    get("/", "/index", "/home") 
        val parameters = ...
        call.respond(ThymeleafContent("/index.html", parameters))
    
    
    ...
    

【问题讨论】:

【参考方案1】:

我知道的唯一压缩方法是创建一个包含主路径的全局变量,然后是 forEach 它。

val homePaths = arrayOf("/path1", "/path2", ...)

...

routing 
    homePaths.forEach  path -> get(path, home()) 

一个很酷的功能是能够指定一个正则表达式作为路由方法的输入。

你可以自己做饭的东西就是做这种事情的 KTX。

fun Routing.get(varargs routes: String, call: suspend PipelineContext<Unit, ApplicationCall>.(Unit)) 
    for (route in routes) 
        get(route, call)
    

最后这样称呼它:

routing 
    get("/path1", "/path2")  /* your handling method */

【讨论】:

这么简单,我想我怎么没想到!谢谢

以上是关于如何为相同的资源使用多个路由的主要内容,如果未能解决你的问题,请参考以下文章

我们如何为多个 UITab 使用相同的 WKWebView

Angular Material Mat-Stepper:如何为多个步骤使用相同的表单组?

如何为多个docker容器使用相同的python映像?

如何为多个产品托管相同的代码?

Spring Boot - 如何为指定根目录中的多个路由提供一个静态 html 文件

如何为每种语言设置不同的路线