Akka 将两条路线组合成一条
让我们考虑一个简化的例子Akka 将两条路线组合成一条,akka,akka-http,Akka,Akka Http,让我们考虑一个简化的例子 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 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时需要记住的一点是,路由
只是一个函数:
因此,您可以创建一个高阶函数来实例化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)
。请求永远不会到达完成的(s“parent/$id/child”)
//Parent.scala
val routes: Route =
pathPrefix("parent" / IntNumber) { (id) =>
get{
complete(id)
} ~ childRoute(id)
}