gRPC错误返回了意外的详细信息字段 我在C++服务器中实现GRPC错误处理,它有另一个路由,NoDEJS为基础的服务器(这实际上是客户端)。p> < >我的问题是, > Error细节> PARAM传递给:GRPC::STATE//C>构造器在C++方面与“客户机”接收的 Error细节>代码不相同。p>
C++服务器:gRPC错误返回了意外的详细信息字段 我在C++服务器中实现GRPC错误处理,它有另一个路由,NoDEJS为基础的服务器(这实际上是客户端)。p> < >我的问题是, > Error细节> PARAM传递给:GRPC::STATE//C>构造器在C++方面与“客户机”接收的 Error细节>代码不相同。p>,c++,node.js,error-handling,grpc,C++,Node.js,Error Handling,Grpc,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 { aw
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" }
}
为了澄清,客户端中的详细信息字段包含来自服务器的消息字段,而客户端中的消息字段包含来自服务器的消息字段加上gRPC状态代码作为前缀
不过,我确实注意到,我要查找的详细信息字段可以在以下(非常简单的)道具下使用:
所以我的问题是:
搞什么鬼?我遗漏了什么吗?这里不同的API对相同的底层协议信息有不同的表示,而且它们使用的名称会发生冲突。有关参考,请参阅。在C++的API中,<代码> ErrRoRoMys> /Cux>参数对应于响应的“状态消息”部分,并且<代码> Error细节> <代码>参数对应于
error\u details
参数将包含一条序列化的google.rpc.Status
proto消息
在节点API中,details
值对应于响应的“Status Message”部分(这也是C++中的error\u Message
参数)。消息
值只是一个聚合的用户可读字符串,它组合了状态代码、状态代码的人类可读名称和详细信息字符串。如问题中所述,grpc status details bin
元数据项没有特殊的访问器,它只是在元数据值中
err.metadata._internal_repr['grpc-status-details-bin'][0].toString() // Originally a buffer