我有一个文件夹root
,其中包含index.html
和其他资源,例如.css
文件。
现在,我正尝试使用下面的akka-http路由(localhost:8080/test
)将文件夹存放在myRoute
。另外,我想在localhost:8080
托管一个hello-world页面。我还希望带斜杠的URI重定向到非斜杠的URI(localhost:8080/test
应该等于localhost:8080/test/
)。
以某种方式,我无法实现这一目标。 hello-world页面运行正常,但是该文件夹未托管。我得到的只是一封The requested resource could not be found.
消息(在Chrome中)。
def route: Route = {
redirectToNoTrailingSlashIfPresent(StatusCodes.Found) {
(pathSingleSlash {
get {
complete(HttpEntity(ContentTypes.`text/html(UTF-8)`, homeHtml)) // "hello world"
}
}
~
pathPrefix("test") {
getFromDirectory("root") // contains the index.html
})
}
}
编辑:
当我尝试使用getFromFile(webDir + "/index.html")
代替getFromDirectory(webDir)
(webDir
为root
)时,index.html
已加载,但无法访问css / js文件。
答案 0 :(得分:1)
我搬到redirectToTrailingSlashIfMissing
与内指令。似乎可以满足您的要求。请注意,webdir
是带有index.html
的文件夹的绝对路径
val webdir = "/Users/<your_absolute_path>/root"
val homeHtml = "homeHtml"
def route =
concat(
pathSingleSlash {
get {
complete(HttpEntity(ContentTypes.`text/html(UTF-8)`, homeHtml)) // "hello world"
}
},
(get & pathPrefix("test")) {
(pathEndOrSingleSlash & redirectToTrailingSlashIfMissing(StatusCodes.TemporaryRedirect)) {
getFromFile(s"$webdir/index.html")
} ~ {
getFromDirectory(webdir)
}
}
)