5

我想知道如何在 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”并返回响应“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)

我认为这段代码意味着如果给定 url “ http://localhost:3000/hello?foo=3 ”,它将返回响应“u got me”。但是,响应状态为 404。

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

也许有人可以帮助我解决这个问题,另外,最好分享一些关于这个 Finch 的好文档。版本更新如此频繁,文档已过时https://finagle.github.io/blog/2014/12/10/rest-apis-with-finch/

4

1 回答 1

6

谢谢你问这个!我相信这是关于 StackOverflow 的第一个 Finch 问题。

从 0.8(今天发布Router)开始,使用组合器将s 和RequestReaders 组合在一起是很可能的(有关详细信息,?请参阅“组合路由器”部分)。

这是说明此功能的示例。

// 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 repo 上有一个全面的文档,我们正在努力保持真实。

于 2015-08-11T06:20:53.177 回答