【问题标题】:Capture request/response in gRPC | How to use gRPC server interceptors in node.js?在 gRPC 中捕获请求/响应 |如何在 node.js 中使用 gRPC 服务器拦截器?
【发布时间】:2021-07-19 07:26:07
【问题描述】:

我是 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,
  longs: String,
  enums: String,
  defaults: true,
  oneofs: 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({}, (error, news) => {
  if (error) throw error
  console.log(news);
});

【问题讨论】:

    标签: node.js grpc


    【解决方案1】:

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

    【讨论】:

    • 谢谢,那么您知道如何在请求进一步之前捕获请求吗?正如我所提到的,我想在 gRPC 调用服务器函数之前记录每个请求!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-13
    • 2018-04-19
    • 2023-01-22
    • 1970-01-01
    • 2018-05-31
    • 2019-07-15
    • 2022-07-12
    相关资源
    最近更新 更多