我可以在我的 graphql 查询中访问请求标头,在 nestjs 中吗?

Posted

技术标签:

【中文标题】我可以在我的 graphql 查询中访问请求标头,在 nestjs 中吗?【英文标题】:Can I access request headers in my graphql query, in nestjs? 【发布时间】:2020-06-23 05:42:54 【问题描述】:

我正在尝试在 graphql 的查询中访问用户的 IP 地址。但我无法获得任何标题信息。如何在我的 graphql 请求中访问我在工厂中创建的上下文?

// app.module.ts
...

@Module(
  imports: [
    ConfigModule,
    GraphQLModule.forRootAsync(
      imports: [ 
        LanguageModule,
        SearchModule],
      inject: [ConfigService],
      useFactory: () => (
        autoSchemaFile: 'schema.gql',
        debug: true,
        fieldResolverEnhancers: ['guards'],
        formatError: (error: GraphQLError): GraphQLFormattedError => 
          return error.originalError instanceof BaseException
            ? error.originalError.serialize()
            : error;
        ,
        context: ( req ): object => 
          console.log("req.ip: ", req.ip); // Here I have the ip
          return  req ;
        ,
      ),
    ), 
  ],
  controllers: [AppController],
  providers: [AppService],
)
export class AppModule 

// search.resolver.ts
...

@Resolver(() => Search)
export class SearchResolver 
  constructor(private readonly service: service) 

  @Query(() => Search)
  async search(@Args() args: SearchArgs): Promise<Search> 

    // I want the ip here, I want to send it as an argument into the query function below
    const response = await this.service.query(args.query, 
      language: args.language,
    );
    return response;
  

【问题讨论】:

【参考方案1】:

根据这个thread解析器context参数应该包含req,但这取决于[取决于配置]。

解析器通常采用 (parent, args, context, info) 参数 - 检查您的上下文中是否定义了上下文。

【讨论】:

谢谢!我可以像你说的那样使用 context 参数访问它。像这样:'''@Query(() => Search) async search(@Args() args: SearchArgs, @Context() context): Promise console.log(context); ... '''

以上是关于我可以在我的 graphql 查询中访问请求标头,在 nestjs 中吗?的主要内容,如果未能解决你的问题,请参考以下文章

在我想使用的 GraphQL Playground 中设置测试标头会导致“无法访问服务器”

如何将请求标头传递给 graphql 解析器

如何在 React 中将 JWT 发送到后端?

使用 neo4j-graphql-js 时如何访问自定义 graphQL 解析器中的请求标头?

无法在 React 中使用 GraphQL 查询 - 已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头

Angular2 中的 Apollo 客户端自定义标头和附加变量