让我们考虑一个简化的例子。
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
。
答案 0 :(得分:1)
路线是功能
使用akka-http时要记住的一件事是Route
只是一个函数,from the documentation:
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")
。