问题标签 [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 - 如何使用 Warp 检查授权标头?
我正在用 Rust 和 Warp 构建一个 graphql api。我查看了文档,但我仍然没有弄清楚如何链接过滤器,特别是检查authorization
请求标头。
这是我的部分代码。它工作正常,但有一个问题。我用 设置了一条路由context_extractor
,.and(warp::header::<String>("authorization")
然后它拒绝所有不包含authorization
在标头中的请求。
我该怎么做
如果请求标头有一个
authorization
in 标头,则返回Context
正确的user_id
Context
如果没有,返回user_id: 0
?
rust - 如何在 Warp 中创建可变路径?
我试图在 Warp 中有一个可变路径。我试过这个:
但我得到了错误:
让路径参数具有'static
生命周期的最佳方法是什么?
web-applications - 在 rust 中使用 warp 服务静态文件
我正在使用warp
库来制作一个生锈的网络应用程序。我正在尝试提供静态文件。我已经从Doc阅读了它的文档。
这是我的代码片段
但是当我访问路径localhost:3030/static/index.js
时,它会返回404
响应
这是文件树
rust - 我们如何在 warp 中重定向到外部 URL?
我想重定向到一个外部 URL,比如https://www.google.com
,但warp::redirect
只需要一个 URI 而不是一个 URL。
rust - 使用 Warp 的 and_then 时未实现未来特征
我正在尝试将 HTTPS 强制添加到 GKE 上基于 Warp 的 Web 应用程序中。
GKE 平台大多是无关紧要的;最重要的细节是负载均衡器终止 SSL/TLS 连接,因此X-Forwarded-Proto
标题中提供了“真实”方案。Warp 解析的文字方案将始终为HTTP
.
逻辑如下:
- 如果方案是
HTTPS
,则正常处理请求。 - 如果方案是,则向等效URL
HTTP
发送 301 重定向。HTTPS
- 如果该方案是其他任何内容,请发送 421(错误定向请求)错误。
- 如果
X-Forwarded-Proto
标头丢失(或发生任何其他实际不可能的情况),则发送 400(错误请求)错误。
此示例中的错误响应没有正文内容,所有 HTTPS 请求都应以 text 响应Hello, world!
。
问题:
显然我在这里遗漏了一些明显的东西,所以我希望有人能把我推向正确的方向!
rust - 有没有办法在 Warp 中作为过滤器的一部分进行验证?
我定义了一个路由和一个端点函数。我还注入了一些依赖项。
这一切似乎都很好。
但是,我希望能够在几个端点前面有一些东西来检查查询参数中的有效键。在里面handler1
我可以添加:
我不想将它单独添加到每个处理程序中。
似乎我应该能够通过 来做到这一点filter
,但我无法弄清楚。我尝试过使用.map()
,但返回多个项目会将其转换为一个元组,我必须更改我的下游函数签名。理想情况下,我想找到一种方法来添加验证或其他过滤器,这些过滤器可以在没有任何下游值知道它们的情况下拒绝请求。
rust - Rust Warp 中的依赖注入
如何将依赖项注入 Warp 中的路由处理程序?一个简单的例子如下。我有一个路由,我想提供一个在启动时确定的静态值,但过滤器是将值传递给最终处理程序的东西。如何在不创建全局变量的情况下传递其他数据?这对于依赖注入很有用。
http - 如何同时使用 Rejection 和问号运算符来处理 Warp 中的错误?
使用warp.rs 0.2.2,让我们考虑一个基本的 Web 服务,它有一个路由GET /
:
我的目标是?
用于路由处理程序中的错误处理,所以让我们编写一个可以错误并提前返回的程序crate::routes
:
这个版本有效。这里返回的错误Url::parse()
是url::ParseError
为了在错误类型之间进行转换,从url::ParseError
to ServiceError
,然后从ServiceError
to warp::Rejection
,我写了一些错误助手crate::errors
:
现在,上述方法有效,我正在尝试缩短第二个代码块以?
直接用于错误处理,并自动从底层错误(此处url::ParseError
)转换为warp::Rejection
. 这是我尝试过的:
url::ParseError
返回的将Url::Parse
很好地转换为 ServiceError 以返回,但从我的处理程序返回 ServiceError 不起作用。我得到的第一个编译错误是:
有没有一种方法可以保持简短的错误处理?
只使用和:
ServiceError
实施warp::reject::sealed::CombineRejection<warp::reject::Rejection>
?_- 解决这个问题?
rust - 有没有更简单的方法来创建自定义过滤器方法来调用 Warp 处理程序?
而不是写这样的东西:
我希望能够写:
-> ->事情handle
在哪里。and_then
map_err
boxed
现在我为每个 arity 处理程序使用一组特征。这是 2-arity 处理程序:
你可以在 Rust 中做到这一点真是太棒了,但有没有更简单的方法来实现这一点?
logging - 如何在warp中记录请求/响应主体?
我正在尝试在 warp 中记录请求/响应主体。
使用warp::log::custom
时,Info
结构不包含任何有关它的信息。
在尝试实现我自己的日志包装器时,基于 的实现warp::log
,该Route
结构是私有的(除其他外)。
我可以在使用反序列化后记录正文
但是,如果用户没有发送正确的正文,它将无法正常工作。此外,我正在寻找一种简单的方法来记录所有请求正文。