让我们考虑一个简化的示例。
def routes: Route = {
pathPrefix("parent" / IntNumber) { (id) =>
get {
complete(id)
} ~
pathPrefix("child") { // this would be in separate file
get {
complete(s"parent/$id/child")
}
}
}
}
我需要的是放置
def childRoutes: Route = {
pathPrefix("child") {
get {
complete(s"parent/$id/child")
}
}
}
进入一个单独的文件并将其组合到父路由中,但是我不知道如何从父路由传播变量id
。
路由是函数
使用Akka-http时要记住的一件事是Route
只是一个函数,来自文档:
type Route = (RequestContext) ⇒ Future[RouteResult]
因此,您可以创建一个高阶功能来实例化childRoute
:
//Child.scala
val childRoute : (Int) => Route =
(id) => pathPrefix("child") {
get {
complete(s"parent/$id/child")
}
}
现在可以与父母组成:
//Parent.scala
val routes: Route =
pathPrefix("parent" / IntNumber) { (id) =>
get{
complete(id)
} ~ childRoute(id)
}
不一致的路线
作为旁注:您的孩子路线将永远无法达到。因为您正在与孩子一起编写get { complete(id) }
(也有get
(,因此您将始终返回complete(id)
。complete(s"parent/$id/child")
将永远不会通过请求达到。