我使用 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 有效负载上的右括号。
当我在本地运行我的网络服务器时,除了作为错误返回给远程调用者之外,如何在命令行中返回此日志。