问题
How can I disable graphiql on production but still able to access it on development?
With express-graphql we can do something like
app.use('/graphql', graphqlHTTP({
schema: MySessionAwareGraphQLSchema,
graphiql: process.env.NODE_ENV === 'development',
}));
With apollo server, my setup is
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'
})
)
and I can't find a way to pass to NODE_ENV to enable/disable graphiql.
回答1:
Do you mean to enable graphiql on development only and disable it on production. If so just exclude the /graphiql handler
if (process.env.NODE_ENV === 'development') {
app.all(
'/graphiql',
graphiqlExpress({
endpointURL: '/graphql',
}),
);
}
回答2:
Here's what I have in a koa setup
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,
}),
})))
)
Note graphiql: config.environment === 'development',
from here you could pass a custom environment variable and start your app with it.
ENABLE_GRAPHIQL=true NODE_ENV=production npm start_my_server
Depending on how you manage your environment variables, you could change the expression to
graphiql: myEnv.ENABLE_GRAPHIQL || myEnv.environment === 'development',
FWIW you should not be enabling graphiql in production
来源:https://stackoverflow.com/questions/45264880/disable-graphiql-on-production