0

我使用 Warp 制作了一个 rust 网络服务器。当我向网络服务器发送请求时,它无法反序列化给定的正文。我确切地知道为什么会发生此错误,并且没有询问如何修复反序列化错误。我遇到的问题是发生此错误时没有记录任何内容。我想学习如何为此类错误生成日志。

有问题的路由的路由器功能在这里:

pub fn put_order(repo: data::Repository) -> impl Filter<Extract = impl Reply, Error = Rejection> + Clone {
    warp::path("orders")
        .and(warp::path("v1")) 
        .and(warp::put())
        .and(with_order_body())
        .and(with_repo(repo))
        .and_then(orders::put)
}

特别是 with_order_body() 函数是我认为通过反序列化引发错误的函数:

fn with_order_body() -> impl Filter<Extract = (model::Order,), Error = Rejection> + Clone {
    warp::body::content_length_limit(1024 * 16).and(warp::body::json())
}

类型已定义(如果您想知道,Order它应该是使用 couch_rs 包的 CouchDB 文档):

#[derive(Debug, Serialize, Deserialize, Clone, CouchDocument)]
pub struct Order {
    #[serde(skip_serializing_if = "String::is_empty")]
    _id: DocumentId,
    #[serde(skip_serializing_if = "String::is_empty")]
    _rev: String,
    items: Vec<OrderItem>,
    user_token: String,
    payment_token: String,
}

当我卷曲我的网络服务器时返回结果错误,但未记录:

Request body deserialize error: missing field `_rev` at line 24 column 1

您可能不会惊讶地发现,请求负载是一个 24 行的 JSON 负载;错误“指向” JSON 有效负载上的右括号。

当我在本地运行我的网络服务器时,除了作为错误返回给远程调用者之外,如何在命令行中返回此日志。

4

0 回答 0