algoan / nestjs-components

A list of useful components for NestJS applications
https://www.algoan.com
253 stars 41 forks source link

Graphql Support for LoggingInterceptor #489

Open agmoss opened 2 years ago

agmoss commented 2 years ago

Currently, the LoggingInterceptor does not work with graphql. Internal calls to intercept, logNext, and logError use the base ExecutionContext from nest without first evaluating the current application context.

Accessors for the in-flight request object are different depending on the application context. For rest they look like:

const req: Request = context.switchToHttp().getRequest<Request>();
const res: Response = context.switchToHttp().getResponse<Response>();
const { method, url } = req;

as you have in logNext

In graphql it looks like

const method = context.getArgs()[2].req.method;
const url = context.getArgs()[2].req.url;

(at least this is the cleanest way I have been able to access these)

As such, the use of rest style of access yields the following logs when in the graphql context:

[LoggingInterceptor - undefined - undefined - undefined] Outgoing response - undefined - undefined - undefined 

Anyway, if you want to support gql with this interceptor I would be open to making a pr! Or perhaps I could add a new one that is specific for graphql.

This is a great assembly of nest utils!

ccoeurderoy commented 2 years ago

Hey @agmoss,

Indeed, we do not handle graphQL for now but it could be nice to handle it. Unfortunately, I can't tell you when we can implement graphQL support.

I think we could create an option for graphQL, no need to create a new package. If you wish to, you can of course contribute and open a new PR to handle this 😁

agmoss commented 2 years ago

Sounds great @ccoeurderoy! I will take a stab at a pr. Cheers

youngkiu commented 2 months ago

I converted two components, LoggingInterceptor and HttpExceptionFilter for GraphQL, including test code.

https://github.com/youngkiu/nestjs-graphql-components/tree/feat/graphql