如何将RequestReader绑定到Finch中的路由?

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/
1个回答

6

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

自从0.8版本(今天发布)以来,使用?组合器可以很容易地将RouterRequestReader组合在一起(有关详细信息,请参见"组合路由器"部分)。

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

// 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仓库上有一份全面的文档,我们正在努力保持其最新。

您是创造者!谢谢。 - Xiaohe Dong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接