在生产中禁用 graphiql

Posted

技术标签:

【中文标题】在生产中禁用 graphiql【英文标题】:disable graphiql on production 【发布时间】:2017-12-29 02:41:36 【问题描述】:

如何在生产环境中禁用 graphiql,但在开发环境中仍然可以访问它?

使用 express-graphql 我们可以做类似的事情

app.use('/graphql', graphqlHTTP(
  schema: MySessionAwareGraphQLSchema,
  graphiql: process.env.NODE_ENV === 'development',
));

使用 apollo 服务器,我的设置是

import graphqlExpress, graphiqlExpress from 'graphql-server-express'

const app = new Express()

app
  .all('/graphql', bodyParser.json())
  .all('/graphql', graphqlExpress(
      schema
  )
  .all('/graphiql', graphiqlExpress(
      endpointURL: 'http://localhost/graphql'
    )
  )

我找不到传递给 NODE_ENV 以启用/禁用 graphiql 的方法。

【问题讨论】:

【参考方案1】:

这是我在 koa 设置中的内容

export default () => (
  convert(graphqlHTTP((req, res, ctx) => (
    schema: require('app/graphql/schema'),
    context: 
      ...ctx.app.context,
      ...ctx.state,
    ,

    // Enable graphql for development environments only
    graphiql: config.environment === 'development',


    formatError: error => (
      message: error.message,
      stack: error.stack,
      locations: error.locations,
    ),
  )))
)

注意graphiql: config.environment === 'development', 从这里您可以传递自定义环境变量并使用它启动您的应用程序。

ENABLE_GRAPHIQL=true NODE_ENV=production npm start_my_server

根据您管理环境变量的方式,您可以将表达式更改为

graphiql: myEnv.ENABLE_GRAPHIQL || myEnv.environment === 'development', 

FWIW 你不应该在生产中启用 graphiql

【讨论】:

【参考方案2】:

您的意思是仅在开发时启用 graphiql 并在生产时禁用它。如果是这样,只需排除 /graphiql 处理程序

if (process.env.NODE_ENV === 'development') 
  app.all(
    '/graphiql',
    graphiqlExpress(
      endpointURL: '/graphql',
    ),
  );

【讨论】:

嘿,这看起来是一种方式。我以为我们可以设置一个布尔值来禁用或启用它。

以上是关于在生产中禁用 graphiql的主要内容,如果未能解决你的问题,请参考以下文章

Tailwind CSS Nuxt 禁用清除选项在生产中引发错误

在生产中禁用 displayName

您应该使用 Babel 配置中的 `env` 部分在生产中禁用 react-transform-hmr

如何在nestjs中禁用swagger进行生产

在 Spring Boot 应用程序的生产环境中禁用 GraphiQL Playground

如何使用 AWS appsync (GraphQL) 禁用自省查询?