6

如何在生产中禁用 graphiql 但仍然能够在开发中访问它?

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

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

使用阿波罗服务器,我的设置是

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 的方法。

4

2 回答 2

2

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

if (process.env.NODE_ENV === 'development') {
  app.all(
    '/graphiql',
    graphiqlExpress({
      endpointURL: '/graphql',
    }),
  );
}
于 2017-07-25T07:51:23.743 回答
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

于 2017-09-21T16:14:46.040 回答