我已经实现了一个LoggingInterceptor应该能够访问最终 GraphQL-Response 及其数据和错误属性 + 原始请求正文和经过身份验证的用户,该用户AuthGuard之前已添加到请求中。(编辑:@jay-mcdoniel 部分解决:user并且body可以通过 访问GqlExecutionContext.create(context).getContext())
事实上,拦截器只是提供了一个完全解析的 GraphQL 对象。
@Injectable()
export class LoggingInterceptor implements NestInterceptor {
intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
return next.handle().pipe(tap(
(allData) => console.log(allData),
(error)=> console.log(error)));
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的拦截器级。它只是调用 RxJS-Operatortap来记录 observable 的当前值。
如果我运行以下 GraphQL-Request ...
mutation {
login(data: { username: "admin", password: "123456" }) {
id
username
token
}
}
Run Code Online (Sandbox Code Playgroud)
...我的服务器使用以下响应正文正确回答:
{
"data": {
"login": {
"id": "6f40be3b-cda9-4e6d-97ce-ced3787e9974",
"username": "admin",
"token": "someToken"
} …Run Code Online (Sandbox Code Playgroud)