微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 gRPC 中捕获请求/响应 |如何在 node.js 中使用 gRPC 服务器拦截器?

如何解决在 gRPC 中捕获请求/响应 |如何在 node.js 中使用 gRPC 服务器拦截器?

我是 gRPC 的新手,我正在寻找一种在调用服务器函数之前在 gRPC 中捕获请求的方法。这可能也需要响应。换句话说,我试图在请求/响应开始之前操纵它们。

我发现了一个名为 interceptor功能,但据我所知,此功能仅随 gRPC-web 提供!

那我该怎么做呢?拦截器仅用于客户端吗?

例如,我想以某种能力(可能是拦截器)记录 gRPC 中的每个请求,我该怎么做?

server.js

const grpc = require('@grpc/grpc-js');
const PROTO_PATH = './news.proto';
const protoLoader = require('@grpc/proto-loader');

const options = {
  keepCase: true,longs: String,enums: String,defaults: true,oneofs: true,};
var packageDeFinition = protoLoader.loadSync(PROTO_PATH,options);
const newsProto = grpc.loadPackageDeFinition(packageDeFinition);

const server = new grpc.Server();
let news = [
  { id: '1',title: 'Note 1',body: 'Content 1',postimage: 'Post image 1' },{ id: '2',title: 'Note 2',body: 'Content 2',postimage: 'Post image 2' },];


server.addService(newsProto.NewsService.service,{
  getAllNews: (call,callback) => {
    return callback(null,{ news });
  }
});

server.bindAsync(
  '127.0.0.1:50051',grpc.ServerCredentials.createInsecure(),(error,port) => {
    if (error) {
      throw new Error(error);
    }

    console.log('Server at port:',port);
    console.log('Server running at http://127.0.0.1:50051');
    server.start();
  }
);

client.js

const grpc = require('@grpc/grpc-js');
const protoLoader = require('@grpc/proto-loader');
const PROTO_PATH = './news.proto';

const options = {
  keepCase: true,};

var packageDeFinition = protoLoader.loadSync(PROTO_PATH,options);

const NewsService = grpc.loadPackageDeFinition(packageDeFinition).NewsService;

const client = new NewsService(
  'localhost:50051',grpc.credentials.createInsecure()
);

client.getAllNews({},news) => {
  if (error) throw error
  console.log(news);
});

解决方法

拦截器是客户端特定的功能。它们也在 Node gRPC 库中实现。 This document 描述了拦截器 API,包括使用示例。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?