【问题标题】:How to return grpc error in nodejs如何在nodejs中返回grpc错误
【发布时间】:2017-08-07 08:42:58
【问题描述】:

我想在服务器端返回 grpc 错误代码和描述。这个我试过了

function sayHello(call, callback) {
  callback({error: {code: 400, message: "invalid input"});
}

但是我从客户那里得到了这个异常

{ Error: Unknown Error
    at /home/thanh/email/node_modules/grpc/src/node/src/client.js:434:17 code: 2, metadata: Metadata { _internal_repr: {} } }

如果我不想像这样在消息定义中包含错误字段。

message Hello {
  string name = 1;
  string error = 2; // don't want this
}

那么将grpc错误发送回客户端的正确方法是什么?

【问题讨论】:

    标签: node.js grpc


    【解决方案1】:

    作为补充,GRPC 只允许 16 种错误。您可以从其网站查看所有错误代码:https://grpc.io/docs/guides/error/#error-status-codes

    在这里我找到了 NodeJs 错误处理的示例代码:https://github.com/avinassh/grpc-errors/blob/master/node/server.js

    【讨论】:

      【解决方案2】:

      改成:

      return callback({
        code: 400,
        message: "invalid input",
        status: grpc.status.INTERNAL
      })
      

      【讨论】:

      • 我想注意code 字段在这里不会做任何事情。如果要传播到客户端,需要添加到错误metadata。如果你想要 HTTP 错误代码 400 的语义,我建议使用相应的 gRPC 状态:grpc.status.INVALID_ARGUMENT
      • 我不知道为什么,但只有当我删除 codestatus 并离开 message 时它才对我有效。有人知道为什么吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-14
      • 2016-09-02
      • 2020-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多