如何在Finch中将RequestReader绑定到Route

时间:2015-08-11 00:44:15

标签: scala finch

我想知道如何在Finch中将RequestReader和Route绑定在一起。我没有找到一个完整的例子。

这个例子来自finch github,它运行正常。

import io.finch.route._
import com.twitter.finagle.Httpx

val api: Router[String] = get("hello") { "Hello, World!" }

Httpx.serve(":3000", api.toService)

我明白这段代码会得到路径"你好"并将返回响应" hello world"

然后我想将RequestHeader绑定到它。

  val doSomethingWithRequest: RequestReader[String] =
    for {
      foo <- param("foo")
      bar <- param("bar")
    } yield "u got me"

  val api: Router[RequestReader[String]] = Get / "hello" /> doSomethingWithRequest

  val server = Httpx.serve(":3000", api.toService)

我认为这段代码意味着如果给出了网址&#34; http://localhost:3000/hello?foo=3&#34;它将返回响应&#34;你让我&#34;。但是,响应状态为404。

我认为我对Route和RequestHeader之间的组合做错了。

也许有人可以帮我解决这个问题,而且,分享一些关于这个芬奇的好文章会更好。该版本频繁出现,文档已过时https://finagle.github.io/blog/2014/12/10/rest-apis-with-finch/

1 个答案:

答案 0 :(得分:6)

感谢您提出这个问题!我相信这是StackOverflow上第一个有关Finch的问题。

自0.8(has been released today)以来,使用Router组合子很可能将RequestReader?组合在一起(有关详情,请参阅"Composing Routers"部分)详情)。

以下是说明此功能的示例。

// GET /hello/:name?title=Mr.
val api: Router[String] = 
  get("hello" / string ? param("title")) { (name: String, title: String) =>
    s"Hello, $title$name!"
  }
Httpx.serve(":8081", api.toService)

你提到的博客文章已经过时了,所有博客帖子都是如此。虽然,在Github回购中有一个comprehensive documentation,我们试图保持实际。