0

我用提供者创建了一个拦截器并将其绑定到“rpc”

export class RPCProvider implements Provider<Interceptor> {

    constructor(
        @inject(CertifierBindings.CERTIFIER)
        public certifierModule: CertifierModule
    ) { }

    value() {
        return this.intercept.bind(this);
    }

    async intercept<T>(
        invocationCtx: InvocationContext,
        next: () => ValueOrPromise<T>,
    ) {

        // i want to pass some parameters in here
        // ...

        return await next();
    }
}

应用程序.ts

this.bind('rpc').toProvider(RPCProvider);

我可以这样使用它:

    @intercept('rpc')
    @authenticate('basic', {
        scope: []
    })
    @post('/test/v1/anything')
    async test(): Promise<any> {
        return await this.dbMain.col("Maintainer").aggregateAndToArray([]);
    }

但是每次使用时如何传递参数?像这样的东西:

    @intercept(rpc({
        a:1, // <= 
        b:2
    }))
    @authenticate('basic', {
        scope: []
    })
    @post('/test/v1/anything')
    async test(): Promise<any> {
        return await this.dbMain.col("Maintainer").aggregateAndToArray([]);
    }

4

1 回答 1

0

export const MyInterceptor = function (
    ...args: any[] // <= pass custom parameters
): Interceptor {
    return async function (invocationCtx, next) {
         // get binding with `invocationCtx`
         const bindingObject = await invocationCtx.get<any>('binding-key');
    }
}

于 2019-08-17T05:19:53.090 回答