getFromDirectory не работает в akka-http маршруте - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть папка root, которая содержит index.html и другие ресурсы, такие как .css файлы.

Теперь я пытаюсь разместить эту папку на localhost:8080/test, используя akka-httpмаршрут (myRoute) ниже.Кроме того, я хочу разместить страницу hello-world на localhost:8080.Я также хотел бы, чтобы 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.

1 Ответ

0 голосов
/ 03 февраля 2019

Я переместил 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)
        }
      }
    )
...