【发布时间】:2019-09-05 12:41:44
【问题描述】:
我正在我的 C++ 服务器中实现 gRPC 错误处理,该服务器具有由另一个基于 nodejs 的服务器(在这种情况下实际上是客户端)调用的路由。
我的问题是在 C++ 端传递给grpc::Status 构造函数的error_details 参数与客户端收到的error_details 不同。
C++ 服务器:
return grpc::Status(
isError ? grpc::StatusCode::UNKNOWN : grpc::StatusCode::OK,
"application-specific error code", // the error_message param
"Extended error details" // the error_details param
);
NodeJS 客户端:
try {
await grpc.makeCall({params: 12345})
} catch(err) {
const { details, message } = err
console.log({ details, message });
// -> { details: "application-specific error code", message: "2 UNKNOWN application-specific error code" }
// Expected message:
// -> { details: "Extended error", message: "application-specific error code" }
}
为了澄清,客户端中的 details 字段包含来自服务器的消息字段,而客户端中的消息字段包含来自服务器的消息字段以及作为前缀的 gRPC 状态代码。
但是,我确实注意到,我所追求的详细信息字段在这个(非常简单的)道具下可用:
err.metadata._internal_repr['grpc-status-details-bin'][0].toString() // Originally a buffer
所以我的问题是:
有没有搞错?我错过了什么吗?
【问题讨论】:
标签: c++ node.js error-handling grpc