问题标签 [http4s]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
601 浏览

scala - http4s 可以在给定 Future 的情况下执行不同的状态代码吗?

我正在使用http4s,并且我有一个Try为响应生成一些 json 数据:

此函数正确返回一个Task[Response]

但是,我想TryFuture. 匹配不再起作用,因为未来可能在匹配时尚未解决。所以,我可以映射未​​来:

但这会返回 aFuture[Task[Response]]这不是 http4s 想要的。Await.result用它来拆箱似乎不合适Future——我认为这可能会导致线程池问题——但它确实使代码工作。

http4s 接受期货作为任务创建者的参数:

但这并不能让我在出现不同错误时设置不同的状态码。一个解决方案可能是执行.recover一项任务,但我看不到一个明显的方法来做到这一点。

Future如果出现不同的失败情况,我如何调用不同的 http4s 任务包装器?我需要使用中间件吗?

0 投票
2 回答
1407 浏览

circe - Http4s EntityDecoder 不是为简单案例类自动派生的

我收到此错误:

对于以下案例类:

遇到POST代码错误:

具有以下POST主体:

我认为当身体被转换为时会发生这种UserProfile情况req.as[UserProfile]

但是,这是一个普通的案例类,EntityDecoder应该是自动派生的!我知道akka-http会!

有什么想法/建议吗?

请注意: Http4sVersion = "0.18.0-M4"circe version "0.9.0-M1"

0 投票
1 回答
2810 浏览

scala - 在 http4s 中处理多部分内容

我想知道如何使用http4s库处理多部分内容。

想象一个具有以下片段的服务(完整的要点在这里):

如果我执行服务并填写相应的字段,我将获得如下输出:

所以我知道如何获取有关部件的信息,这些部件是 typePart[IO]和 contains headersand的元素body

我想知道如何处理这些部分。例如,在这种情况下,我想打开文件并告知其长度。这样做的惯用方法是什么?

0 投票
1 回答
143 浏览

scala - fs2:检查 Seq(Task) 是否成功

我有一个异步 http4s 客户端,在运行一些请求后,我从中获得了一组结果。我想检查Seq[Task[Response]]所有对象的此集合 (a) 是否已完成Task,并且Response对象是否处于特定状态。

如果我使用Future而不是任务,我会做类似的事情

fs2.Task有没有办法使用代替来实现类似的功能?在我有限的理解中,我假设在某些时候我将不得不调用unsafeRun,这将阻塞Task集合中的每个。

0 投票
1 回答
715 浏览

scala - FS2 按顺序运行流

我有一个相当简单的用例。我有两个 Web 服务调用,一个获取产品,另一个获取关系。我想运行 fetchProducts() 首先从产品集中提取一个字段,然后将输出传递给 fetchRelationships(ids: Seq[String]) 以便我可以在产品上重新设置关系。这是代码:

我受到外部 Api 的限制,无法批量获取结果。所以我不确定如何使用 fs2 来表达这一点,或者我是否应该使用它。

0 投票
2 回答
236 浏览

scala - 将 Http4s 升级到 0.18:StaticFile 和 fallthrough/pass

在 Http4s 0.16.6a 中,我有以下服务。

它从 url 获取路径并尝试确定是否可以提供静态文件。因此,一个 GET 请求/index.html将尝试加载它,fromFile如果找不到,则失败或“通过”。当使用 与其他服务组合时||,这意味着总函数 (from lift) 将被视为有点像部分函数 (from apply)。

我似乎无法将其转换为 Http4s 0.18.x。

Http4s文档建议如下:

这是我正在尝试做的基本形式,只是我想将它泛化一点,而不是为我想要服务的每个文件创建一个部分函数。即避免这种情况:

所以,我的问题是:

  1. 在 0.18 中使用时是否有Pass和 passthrough的概念lift
  2. 如何使用NooopCacheStretegywith lift
  3. 最终,如何将上面的代码转换为 0.18?

到目前为止,我的努力导致了这种可憎(obvs 无法编译):

请注意,我正在尝试使用HttpService.liftnot OptionT.liftF(如推荐的那样)。主要是因为我不知道怎么做!

0 投票
1 回答
1984 浏览

scala - 如何使用 http4s 服务器和客户端库作为代理?

我想使用 http4s 作为代理(如 nginx),如何将所有数据从我的 http4s 服务器转发到另一个 http 服务器?

我真正想要做的是在执行转发功能之前在每个请求上附加一个验证功能。希望是这样的:

如何使用 http4s 和它的客户端来做到这一点?
谢谢

更新

在@TheInnerLight 的帮助下,我尝试使用代码片段:

有一个请求:http://localhost:28080(http4s server listen at 28080):
但发生错误:

最新版本

它适用于我的 REST API Web 服务器。代理测试
时出现一些错误:scala-lang.org

0 投票
1 回答
450 浏览

cassandra - Phantom DSL 中 Cassandra 连接的运行时配置

我正在使用幻象连接到 Apache Cassandra 并希望在运行时配置连接器,即我想解析一些配置文件,提取 Cassandra 数据库列表并以某种方式将其传递给我的Database对象。

我按照本指南在我的服务DatabaseProvider之间增加了一层。Database因此,我可以提供这样的静态DatabaseProvider

在我的main职能中,我做

如果没有单例对象,如何在运行时获得相同的结果?

我做了几次尝试,但总是得到NullPointerExceptions。我目前的方法是让杰克逊从文件中读取一个 Cassandra 配置对象:

然后我的入口点从fs2扩展StreamApp

这会导致以下错误:

0 投票
1 回答
1177 浏览

scala - 如何以编程方式关闭 fs2.StreamApp?

扩展StreamApp要求您提供stream定义。它有一个requestShutdown参数。

def stream(args: List[String], requestShutdown: F[Unit]): Stream[F, ExitCode]

我为此提供了实现,并理解它args是作为命令行参数传入的。但是,我不确定是什么提供了requestShutdown参数以及我可以用它做什么。

具体来说,我想在Stream[IO, ExitCode]启动 Http4s 服务器(永远阻塞)上调用正常关闭。

看起来 aSignal是必需的并且必须设置?我试图“获取”的底层流如下所示:

我的streamdef 在这里StreamAppSpec从 fs2 项目中有一些东西,StreamAppSpec但我不知道如何适应它。

0 投票
1 回答
1817 浏览

scala - 使用 http4s 打开 Websocket 连接

我正在运行 http4s WS 示例: https://github.com/http4s/http4s/blob/master/examples/blaze/src/main/scala/com/example/http4s/blaze/BlazeWebSocketExample.scala

我正在尝试从 google chrome 控制台连接到它:

但实际上我没有看到任何消息。在控制台日志中我看到

并且服务器日志不包含错误:

我想念什么?