在 grpc-web Typescript 中绑定拦截器
Binding interceptor in grpc-web Typescript
我正在尝试按照本教程 https://grpc.io/blog/grpc-web-interceptor/ 为我的 grpc-web 客户端请求添加拦截器。使用解释如何将拦截器绑定到调用的最后一行,在打字稿中使用该调用我首先得到一个错误,因为 protoc-gen 编译器在构造函数中创建了一个具有以下参数的客户端服务
constructor (hostname: string,
credentials?: null | { [index: string]: string; },
options?: null | { [index: string]: string; })
所以我不能真正使用本教程中解释的 fromat
const promiseClient = new MyServicePromiseClient(
host, creds, {'unaryInterceptors': [interceptor1, interceptor2, interceptor3]});
我试过使用类似这样的格式
const promiseClient = new MyServicePromiseClient(
host, creds, {'unaryInterceptors': 'interceptor1'});
但它不起作用,我的拦截器中有断点,但它们从未达到该点。
如何将我的拦截器绑定到调用?
编辑
我的拦截器代码并不花哨,它只是教程中的代码,稍微转换为 Typescript 但这里是
export class interceptor1 {
intercept = function (request: any, invoker: any) {
// Update the request message before the RPC.
const reqMsg = request.getRequestMessage();
reqMsg.setMessage('[Intercept request]' + reqMsg.getMessage());
// After the RPC returns successfully, update the response.
return invoker(request).then((response: any) => {
// You can also do something with response metadata here.
console.log(response.getMetadata());
});
}
}
事实证明,这是 grpc-web 版本 1.2.0
中的一个特定问题
特定版本的解决方法是使用@ts-ignore,拦截器将起作用
从 grpc-web 版本 1.2.1 及更高版本开始,该问题已得到修复
我正在尝试按照本教程 https://grpc.io/blog/grpc-web-interceptor/ 为我的 grpc-web 客户端请求添加拦截器。使用解释如何将拦截器绑定到调用的最后一行,在打字稿中使用该调用我首先得到一个错误,因为 protoc-gen 编译器在构造函数中创建了一个具有以下参数的客户端服务
constructor (hostname: string,
credentials?: null | { [index: string]: string; },
options?: null | { [index: string]: string; })
所以我不能真正使用本教程中解释的 fromat
const promiseClient = new MyServicePromiseClient(
host, creds, {'unaryInterceptors': [interceptor1, interceptor2, interceptor3]});
我试过使用类似这样的格式
const promiseClient = new MyServicePromiseClient(
host, creds, {'unaryInterceptors': 'interceptor1'});
但它不起作用,我的拦截器中有断点,但它们从未达到该点。 如何将我的拦截器绑定到调用?
编辑
我的拦截器代码并不花哨,它只是教程中的代码,稍微转换为 Typescript 但这里是
export class interceptor1 {
intercept = function (request: any, invoker: any) {
// Update the request message before the RPC.
const reqMsg = request.getRequestMessage();
reqMsg.setMessage('[Intercept request]' + reqMsg.getMessage());
// After the RPC returns successfully, update the response.
return invoker(request).then((response: any) => {
// You can also do something with response metadata here.
console.log(response.getMetadata());
});
}
}
事实证明,这是 grpc-web 版本 1.2.0
中的一个特定问题特定版本的解决方法是使用@ts-ignore,拦截器将起作用
从 grpc-web 版本 1.2.1 及更高版本开始,该问题已得到修复