问题标签 [rust-warp]
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.
rust - 如何在扭曲中使用斜杠重定向到 URL?
我warp
用来提供静态文件目录。不幸的是,只有当我在路径中添加斜杠时,才能解析这些静态文件中使用的相对链接。
这是我用来提供目录的代码:
所以现在
0.0.0.0:3030/segment/another/
工作正常0.0.0.0:3030/segment/another
不工作
原则上我不会介意这一点,只是总是使用带有斜杠的 URL,但是当我从 iOS 上的 Safari(作为 PWA)“添加到主屏幕”页面时,会自动省略尾斜杠。
所以为了解决这个问题,我尝试创建一个重定向,然后像这样添加尾部斜杠:
但是此重定向过滤器仅匹配0.0.0.0:3030/segment/another/
. 当我省略warp::path::end()
重定向工作时,0.0.0.0:3030/segment/another
但现在所有内容(例如0.0.0.0:3030/segment/another/styles.css
)都被重定向到0.0.0.0:3030/segment/another/
.
有没有办法只在路径不以斜杠或文件扩展名(例如等)结尾时.html
重定向.css
?
可能我的整体方法在这里也不正确。
rust - 如何正确处理 Warp 路线中的错误
我正在尝试将一个重要的经纱REST 应用程序构建到模块中,同时优雅地处理错误和拒绝。它没有按我预期的方式工作。考虑这个简单的应用程序:
main.rs
路线.rs
处理程序.rs
这不会编译,因为在 routes.rs 我试图在闭包中返回一个 Rejection 结构,它与返回类型不匹配impl Reply
。
我怎样才能让它工作?我试图更改的返回类型,convert_route
但这不适用于warp::serve
.
对于奖励分数,您能否告诉我如何在成功时在处理程序中包含纯文本响应,以及在出现错误时如何包含不同的状态代码?
这对奖金不起作用,但它向您展示了我的想法。
rust - 从函数返回一个扭曲过滤器
我正在使用warp在 Rust 中创建服务器。假设我设置了这两条路线。
我想将路线移动到自己的功能中。返回类型是什么?
例如:
我已经尝试过使用warp:Filter
它的多种变体,但我还没有找到可以编译的返回类型。
PS 我知道在这个例子中将过滤器提取到它们自己的函数中只会使事情复杂化,但我有一种情况,它实际上可能会简化事情。
rust - Rust 扭曲处理程序中的多种类型的 Ok() 会产生错误
我对 Rust 很陌生,我似乎不明白为什么
此代码示例是使用带有warp的外部数据库的 Web 处理程序:
我的理解是 Result 值是一个impl warp::reply::Reply
,因此可以返回具有该特征的任何结构。这里使用了两个OK()
,以符合 Infallible 错误策略。如果有错误,处理程序不应该抛出任何错误,而只是返回一个 400 错误。
两个结构都返回了——warp::reply::Json和warp::reply::WithStatus——实现了warp::reply::Reply特征。所以,在我从其他语言的角度来看,这应该是好的。
这是我得到的错误:
为什么我不能在不同的 Ok() 中传递两个满足相同特征的不同结构?
rust - How can I check the error kind from Warp's try_bind_with_graceful_shutdown?
How can I check if the error from try_bind_with_graceful_shutdown
is std::io::ErrorKind::AddrInUse
?
asynchronous - Rust:Tokio + Warp 在后台运行
自从我最近开始研究以来,这里是 Rust 新手。我正在尝试让休息 api 工作,以下代码对我来说完全正常。
MyRest.rs
main.rs
现在的问题是我不希望我的 main 成为一个async
并且我只是无法弄清楚如何run_bro()
像上面发生的那样无限期地运行该函数。我已经尝试过block_on
了,它只是阻塞并等待run_bro
中断这是预期的,当我尝试它时spawn
它只是运行并退出。Tokio 上的文档让我感到困惑,这就是我在这里寻求帮助的原因。
block_on
产卵
需要明确的是,我的问题是如何调用异步run_bro()
函数并从同步主函数中等待?提前致谢!!
multithreading - 什么时候适合为静态调度实现 Send + Sync
我发现自己在玩warp。
我想使用static dispatch将数据库 Trait 传递给warp::Filter,这样具体的数据库可能会有所不同。
我读到 Send + Sync实施起来不安全,但我不完全理解何时实施它们是合适的。
在这种情况下实现 Send + Sync 是否合理:
编辑:
是的,这个例子是完全合理的!
正如@trentcl 和@Masklinn 所指出的,我实际上并没有实现Send + Sync,我只是要求传递给过滤器的任何类型T,实现Send + Sync Traits,这是完全安全的Rust。
rust - 如何记录反序列化失败
我使用 Warp 制作了一个 rust 网络服务器。当我向网络服务器发送请求时,它无法反序列化给定的正文。我确切地知道为什么会发生此错误,并且没有询问如何修复反序列化错误。我遇到的问题是发生此错误时没有记录任何内容。我想学习如何为此类错误生成日志。
有问题的路由的路由器功能在这里:
特别是 with_order_body() 函数是我认为通过反序列化引发错误的函数:
类型已定义(如果您想知道,Order
它应该是使用 couch_rs 包的 CouchDB 文档):
当我卷曲我的网络服务器时返回结果错误,但未记录:
您可能不会惊讶地发现,请求负载是一个 24 行的 JSON 负载;错误“指向” JSON 有效负载上的右括号。
当我在本地运行我的网络服务器时,除了作为错误返回给远程调用者之外,如何在命令行中返回此日志。