问题标签 [actix-web]

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 投票
3 回答
1597 浏览

rust - 如何在 Actix-Web 中为多种方法使用路由属性宏

Actix Web Framework中,如何使用路由属性宏 ( #[http_method("route")]) 将多个 http 方法绑定到一个函数?

例如,我有这个微不足道的端点:

我想要相同的端点处理HEAD请求,我该怎么做? 我最初的方法是堆叠宏:

但我确实得到了一个编译错误:

我已经经历了actix-web并且actix-web-codegen docs没有找到任何解决这个问题的方法

0 投票
0 回答
537 浏览

rust - 如何在 actix-web 中使用 tokio_postgres

所以我想在 actix API 中使用 tokio_postgres,我刚开始,在我的获取请求中共享客户端时遇到了困难。这是我的代码:

我将此代码基于,但它似乎不起作用。

我也想保持“纯粹”,所以如果可能的话,我不想拥有一个全球客户。甚至可以做我想做的事吗?

0 投票
1 回答
1268 浏览

rust - actix_web 中间件 ErrorHandlers 在 ServiceResponse 中返回错误消息

我正在尝试捕获对我的服务器发出的请求可能发生的错误。

当我在我的一个 POST 请求中收到 400(甚至在到达我的请求处理程序方法之前抛出)并且在启用调试日志后我没有收到关于问题的反馈时,出现了这个问题我看到了问题

现在,我希望能够捕获该错误,以便可以将其发送回 400 响应的正文中。

我开始了

并且handle_bad_request我能够修改响应正文以包含新信息

理想情况下,我想要做的是接受错误ServiceResponse并将其发送回响应中。我可以通过这样做来阅读错误

但至于实际采取该错误并将其发送回响应中,我无法弄清楚。

0 投票
1 回答
2969 浏览

postgresql - 不能使用 UUID 作为主键:Uuid:diesel::Expression is not满足

我想将 UUID 字段作为 Postgres 表中的主字段,但出现以下错误:

一些较老的问题是关于柴油的 UUID,但没有一个是可插入的,我特别得到了错误。我正在使用带有 actix web 的柴油。

这是我的模型:

还有我的表模式

我发现一些旧帖子表明该字段可能可以为空,但idPRIMARY KEY我的 up.sql 表中,所以它不能为空。

该表是从diesel-cli 生成的,那里似乎没有任何问题。

这是我的 Cargo.toml

0 投票
1 回答
132 浏览

rust - 我可以将值借入闭包而不是移动它们吗?

我正在为用actix-web编写的服务器应用程序编写 GET 方法。LMDB是我使用的数据库,它的事务需要在其生命周期结束之前中止或提交。

为了避免一堆嵌套match,我尝试map_err在所有返回结果的函数上使用。在那里我尝试中止交易,但交易被移入关闭而不是被借用。

有什么办法可以将交易借入闭包中,还是我必须硬着头皮写一堆嵌套匹配?本质上,编写此函数的最符合人体工程学的方式是什么?

示例代码(参见旁边的注释txn.abort()):

0 投票
3 回答
1127 浏览

rust - 在 actix 线程中执行同步 http 客户端获取

我有一个 actix 端点,我需要做一个同步的 http 客户端获取来获得一些结果,并返回一些数据。我的端点不能使用async,所以我不能使用任何.await方法。

我试过在我的端点中使用 reqwests 阻塞客户端,如下所示:

但它给了我错误:

0 投票
0 回答
265 浏览

rust - 使用带有生命周期参数的应用程序状态会导致 rust 编译器中的生命周期问题

我已将应用程序状态定义为具有生命周期参数,如下所示:

并按预期将其传递给actix服务器,代码如下:

当我尝试访问存储在路由中的应用程序状态中的数据库时,请参见下文:

我收到以下错误:

我一直在戳戳这个问题,尝试不同的生命周期,指定一个人应该比另一个人活得更长,等等都无济于事。我想我缺少对为什么会发生此错误消息的具体理解。我的思考过程是客户端和数据库都是在函数内部借用的,所以我很困惑为什么当函数结束时它们被删除应该是一个问题。

我会注意到我的代码(比这个例子大)在我向应用程序状态引入生命周期参数之前都运行良好,所以我假设我只是没有提供编译器之前没有提供的一些生命周期参数。

我希望当前的示例足以至少对出了什么问题有所了解。

任何帮助将不胜感激,我对 rust/actix 还很陌生,并且努力让这个(看起来应该是相当常见和简单的用例)工作。

0 投票
1 回答
1206 浏览

json - 使用 actix_web 对部分结构进行 Serde 反序列化

我有一个 API 端点,actix_web用于反序列化传入的 JSON 有效负载(actix_web最终serde用于 JSON 反序列化)。

例如,我有一些看起来像这样的东西:

serde目前,只有能够反序列化结构的所有字段,此端点才会成功返回。即一个请求必须包含field1field2键。

例如,这将是成功的:

但这不会(因为field2有效载荷中缺少):

所以我的问题是,这可以做到吗?可以将带有键值字段子集的 JSON 有效负载发送到actix_web期望所有字段都存在的端点吗?

或者更确切地说,是否有一种通用的方法可以用actix_webor反序列化像这样的部分结构serde

0 投票
0 回答
441 浏览

multithreading - 在 Rust 中协调队列和线程?

我正在尝试在 Rust 中实现以下流程: 线程流

  1. 条目 (JSON) 被提交给 Actix Web 侦听器并进行处理
  2. 条目被提交到“可观察队列”
  3. 通知 Actix Web 客户端
  4. 客户端将其发送(通过 HTTP)到后端。这可能会失败
  5. 如果失败,如果提交失败少于 10 次,则将条目交给“计时器”
  6. 30 秒后,计时器将条目重新提交到队列中,并且流程在 3 处恢复

我使用vert.x和 Java(GitHub 项目)解决了这个问题,并希望将其用作学习 Rust 的示例项目。

更新:

找到了actix 文档并实现了 Actix::Actor,它涵盖了 1->4

这大大缩小了我的问题:

  • 如何构建延迟计时器?
  • 当我在我的main()方法中启动演员时,它也使用let c_store = CommentStore::start(CommentStore {});我在c_store. 但是,我需要在指定为 Route 目标的异步函数之一中发送给参与者。我如何最好地移交地址。全局变量似乎不是答案。

当前主要功能

非常感谢帮助

0 投票
1 回答
245 浏览

mongodb - 在`mongodb` Rust Lang 中找不到`options`

我正在尝试使用 mongodb 库在 rust 中连接到 mongodb

这是代码

我收到以下错误

  1. 错误[E0432]:未解决的导入mongodb::options

  2. 使用 mongodb::{Client, options::ClientOptions}; | options^^^^^^^找不到mongodb

  3. 让客户端 = Client::with_options(client_options)?; | ^^^^^^^^^^^^ 函数或相关项目未在std::sync::Arc<r2d2_mongodb::mongodb::ClientInner>

在此处输入图像描述