如何解决在 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 举报,一经查实,本站将立刻删除。