我可以在我的 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以上是关于我可以在我的 graphql 查询中访问请求标头,在 nestjs 中吗?的主要内容,如果未能解决你的问题,请参考以下文章
在我想使用的 GraphQL Playground 中设置测试标头会导致“无法访问服务器”
使用 neo4j-graphql-js 时如何访问自定义 graphQL 解析器中的请求标头?
无法在 React 中使用 GraphQL 查询 - 已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头