如何禁用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
相关产品推荐
相关产品推荐

