getFromDirectory在Akka-http路由中不起作用

时间:2019-02-01 10:15:44

标签: scala akka akka-http

我有一个文件夹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)webDirroot)时,index.html已加载,但无法访问css / js文件。

1 个答案:

答案 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)
        }
      }
    )