You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何禁用GraphQL Playground?NestJS配置playground:false仍生效

禁用GraphQL Playground无效的问题

我在NestJS应用中配置了GraphQL,默认启用了GraphQL Playground,想要禁用它。已经在app.module.ts的GraphQLModule配置里设置了playground: false,但Playground仍然处于启用状态。

相关配置代码

package.json

"dependencies": {
  "@nestjs/common": "^7.0.8",
  "@nestjs/core": "^7.0.8",
  "@nestjs/graphql": "^7.3.4",
  "@nestjs/microservices": "^7.0.8",
  "class-transformer": "^0.2.3",
  "class-validator": "^0.12.2",
  "graphql": "^14.0.0",
  "reflect-metadata": "^0.1.12",
  "rxjs": "^6.0.0"
}

Dockerfile

FROM node:16
RUN mkdir -p /testappservice/app

COPY dist/apps/testappservice-container testappservice/app
COPY apps/testappservice/build/docker/package.json testappservice

WORKDIR /testappservice
RUN yarn install

ENV PORT 80
ENV NODE_TLS_REJECT_UNAUTHORIZED 0
ENV NODE_ENV=production
CMD ["node", "app/index.js"]

app.module.ts

@Module({
  imports: [
    GraphQLModule.forRoot<ApolloDriverConfig>({
      driver: ApolloDriver,
      playground:false,
      typePaths: ['./**/*.graphql'],
      definitions: {
        path: join(process.cwd(), './apps/testappservice/src/graphql.schema.ts'),
      },
      dataSources: () => {
        return {
          xyzAPI: new XYZAPI(),
          abcAPI: new ABCAPI(),
        };
      },
      context: ({ req }) => ({ req }),
    }),
    ABCModule,
    XYZModule,
  ],
  controllers: [],
  providers: [],
})
export class AppModule {}

解决方法

1. 修正配置结构

你使用的@nestjs/graphql@7.3.4版本中,playground配置需要嵌套在apollo选项下,而非顶层配置。修改app.module.ts的GraphQL配置:

GraphQLModule.forRoot<ApolloDriverConfig>({
  driver: ApolloDriver,
  apollo: {
    playground: false,
    introspection: false, // 可选:同时禁用Schema自省,提升生产环境安全性
  },
  typePaths: ['./**/*.graphql'],
  definitions: {
    path: join(process.cwd(), './apps/testappservice/src/graphql.schema.ts'),
  },
  dataSources: () => {
    return {
      xyzAPI: new XYZAPI(),
      abcAPI: new ABCAPI(),
    };
  },
  context: ({ req }) => ({ req }),
}),

2. 确保代码已重新构建部署

Docker容器中运行的是本地dist文件夹的编译产物,如果修改了app.module.ts但未执行构建命令(如yarn build),容器会继续运行旧代码。请先本地构建,再重新生成Docker镜像。

3. 确认环境变量无冲突

虽然设置了NODE_ENV=production,但旧版本@nestjs/graphql不会自动根据环境禁用Playground,显式在apollo配置中设置playground: false可确保覆盖默认行为。

内容的提问来源于stack exchange,提问作者ram4sof

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 08:10:15