Ktor - 静态内容路由

时间:2018-06-18 00:29:45

标签: kotlin ktor

我希望更好地了解Ktor如何处理静态内容的路由。我的静态文件夹(工作目录)中有以下层次结构:

- static
 - index.html
 - (some files)
 - static
  - css (directory)
  - js (directory)
  - (some files)

我想为所有人服务。所以我在routing中直接使用了这段代码:

static {
  defaultResource("index.html", "static")
  resources("static")
}

哪种方法效果很好,但问题在于它正在处理所有请求,包括我的小get

get("/smoketest"){
  call.respondText("smoke test!", ContentType.Text.Plain)
}

一般来说,最好处理Ktor中的静态内容?

Here is the code

谢谢

1 个答案:

答案 0 :(得分:3)

我尝试在本地复制它,并使其以两种不同的方式工作。

  1. 将其中之一放入您的静态块中

file("*", "index.html") // single star will only resolve the first part

file("{...}", "index.html") // tailcard will match anything

  1. 或者,将以下get处理程序作为最后一条路线:

val html = File("index.html").readText() get("{...}") { call.respondText(html, ContentType.Text.Html) }

{...}是一张尾卡,可以匹配尚未匹配的任何请求。

此处提供文档:http://ktor.io/features/routing.html#path

编辑: 对于资源,我做了以下工作:

fun Route.staticContent() {
    static {
        resource("/", "index.html")
        resource("*", "index.html")
        static("static") {
            resources("static")
        }
    }
}

在存储库中看不到您的静态文件,因此这是我的项目中的样子: enter image description here