问题标签 [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.
scala - http4s 可以在给定 Future 的情况下执行不同的状态代码吗?
我正在使用http4s,并且我有一个Try
为响应生成一些 json 数据:
此函数正确返回一个Task[Response]
但是,我想Try
用Future
. 匹配不再起作用,因为未来可能在匹配时尚未解决。所以,我可以映射未来:
但这会返回 aFuture[Task[Response]]
这不是 http4s 想要的。Await.result
用它来拆箱似乎不合适Future
——我认为这可能会导致线程池问题——但它确实使代码工作。
http4s 接受期货作为任务创建者的参数:
但这并不能让我在出现不同错误时设置不同的状态码。一个解决方案可能是执行.recover
一项任务,但我看不到一个明显的方法来做到这一点。
Future
如果出现不同的失败情况,我如何调用不同的 http4s 任务包装器?我需要使用中间件吗?
circe - Http4s EntityDecoder 不是为简单案例类自动派生的
我收到此错误:
对于以下案例类:
遇到POST
代码错误:
具有以下POST
主体:
我认为当身体被转换为时会发生这种UserProfile
情况req.as[UserProfile]
!
但是,这是一个普通的案例类,EntityDecoder
应该是自动派生的!我知道akka-http
会!
有什么想法/建议吗?
请注意: Http4sVersion = "0.18.0-M4"
和circe version "0.9.0-M1"
scala - fs2:检查 Seq(Task) 是否成功
我有一个异步 http4s 客户端,在运行一些请求后,我从中获得了一组结果。我想检查Seq[Task[Response]]
所有对象的此集合 (a) 是否已完成Task
,并且Response
对象是否处于特定状态。
如果我使用Future
而不是任务,我会做类似的事情
fs2.Task
有没有办法使用代替来实现类似的功能?在我有限的理解中,我假设在某些时候我将不得不调用unsafeRun
,这将阻塞Task
集合中的每个。
scala - FS2 按顺序运行流
我有一个相当简单的用例。我有两个 Web 服务调用,一个获取产品,另一个获取关系。我想运行 fetchProducts() 首先从产品集中提取一个字段,然后将输出传递给 fetchRelationships(ids: Seq[String]) 以便我可以在产品上重新设置关系。这是代码:
我受到外部 Api 的限制,无法批量获取结果。所以我不确定如何使用 fs2 来表达这一点,或者我是否应该使用它。
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文档建议如下:
这是我正在尝试做的基本形式,只是我想将它泛化一点,而不是为我想要服务的每个文件创建一个部分函数。即避免这种情况:
所以,我的问题是:
- 在 0.18 中使用时是否有
Pass
和 passthrough的概念lift
? - 如何使用
NooopCacheStretegy
withlift
? - 最终,如何将上面的代码转换为 0.18?
到目前为止,我的努力导致了这种可憎(obvs 无法编译):
请注意,我正在尝试使用HttpService.lift
not OptionT.liftF
(如推荐的那样)。主要是因为我不知道怎么做!
scala - 如何使用 http4s 服务器和客户端库作为代理?
我想使用 http4s 作为代理(如 nginx),如何将所有数据从我的 http4s 服务器转发到另一个 http 服务器?
我真正想要做的是在执行转发功能之前在每个请求上附加一个验证功能。希望是这样的:
如何使用 http4s 和它的客户端来做到这一点?
谢谢
更新
在@TheInnerLight 的帮助下,我尝试使用代码片段:
有一个请求:http://localhost:28080
(http4s server listen at 28080):
但发生错误:
最新版本
它适用于我的 REST API Web 服务器。代理测试
时出现一些错误:scala-lang.org
cassandra - Phantom DSL 中 Cassandra 连接的运行时配置
我正在使用幻象连接到 Apache Cassandra 并希望在运行时配置连接器,即我想解析一些配置文件,提取 Cassandra 数据库列表并以某种方式将其传递给我的Database
对象。
我按照本指南在我的服务DatabaseProvider
之间增加了一层。Database
因此,我可以提供这样的静态DatabaseProvider
:
在我的main
职能中,我做
如果没有单例对象,如何在运行时获得相同的结果?
我做了几次尝试,但总是得到NullPointerException
s。我目前的方法是让杰克逊从文件中读取一个 Cassandra 配置对象:
这会导致以下错误:
scala - 如何以编程方式关闭 fs2.StreamApp?
扩展StreamApp
要求您提供stream
定义。它有一个requestShutdown
参数。
def stream(args: List[String], requestShutdown: F[Unit]): Stream[F, ExitCode]
我为此提供了实现,并理解它args
是作为命令行参数传入的。但是,我不确定是什么提供了requestShutdown
参数以及我可以用它做什么。
具体来说,我想在Stream[IO, ExitCode]
启动 Http4s 服务器(永远阻塞)上调用正常关闭。
看起来 aSignal
是必需的并且必须设置?我试图“获取”的底层流如下所示:
我的stream
def 在这里,StreamAppSpec
从 fs2 项目中有一些东西,StreamAppSpec
但我不知道如何适应它。
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 控制台连接到它:
但实际上我没有看到任何消息。在控制台日志中我看到
并且服务器日志不包含错误:
我想念什么?