Я не могу получить доступ к игровой площадке GraphQL с помощью NestJS. Я изучаю документацию и следую этому https://docs.nestjs.com/graphql/quick-start до раздела Resolvers, чтобы сгенерировать schema.gql
, но при попытке связаться с localhost:3000/graphql
не удается подключиться.
Сначала я подумал, что мой код настроен неправильно, но я потратил некоторое время на изучение примеров Nest и обнаружил, что они также не работают при попытке доступа к конечной точке /graphql
. Это работает, если я настрою конечную точку get
для возврата тела JSON с использованием метода REST.
import { Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql';
import { RecipesModule } from './recipes/recipes.module';
@Module({
imports: [
RecipesModule,
GraphQLModule.forRoot({
installSubscriptionHandlers: true,
autoSchemaFile: 'schema.gql',
}),
],
})
export class AppModule {}
Это прямо из примера NestJS. Насколько я понимаю, GraphQLModule должен устанавливать соединение с конечной точкой /graphql
. Следуя документам, все graphql, apollo-server-express, and graphql-tools
были установлены.
Любая идея, почему маршрут graphql не подключается?
[Редактировать]: Вещи, которые я пробовал до сих пор:
playground: true
явно с помощью GraphQLModule.forRootNODE_ENV
не является «производством»localhost:3000/graphql
и получите ошибку проверки graphql, поэтому подтвердите правильное подключение@JayMcDoniel Я должен был указать в посте, что я уже пробовал, извините. Я пробовал оба и, к сожалению, не смог подключиться к конечной точке. Я просто свернул конечную точку, чтобы увидеть, подключается ли она к graphql, и похоже, что это так, поскольку она возвращает ошибки проверки GraphQL.
Можете ли вы предоставить репродукцию тогда? Из того, что вы поделились, не видно, почему это происходит
Итак, я попробовал использовать пример Nest в их репозитории на github (github.com/nestjs/nest/tree/master/sample/23-graphql-code-ffirst). Это настолько просто, насколько это возможно, и по существу совпадает с примером из документации. Ничего не изменилось, просто не удалось подключиться к игровой площадке gql. Скручивание с тем же результатом, возможность видеть ошибки проверки gql, поэтому он подключается к серверу.
В этом образце curl завершается неудачно, но браузер запрашивает то же место успешно. Вероятно, глядя на пользовательский агент. Нет особого смысла отправлять интерактивную площадку в командную строку
Конечно, для командной строки я просто имел в виду отправку запроса Post для запуска запроса, а не попытку доступа к игровой площадке. Но эти запросы работали, и на запросы в схеме ссылались правильно. Странно, что игровая площадка была доступна для вас, но не для меня, покопаюсь еще немного и посмотрю, разберусь ли я. Спасибо!
Кажется, это проблема с WSL2, работающим в Windows 10. В этой ветке на github есть некоторое представление об этой проблеме.
Отключите быстрый запуск, чтобы разрешить доступ к локальному хосту.
Я столкнулся с подобной проблемой, это то, что я сделал. Я надеюсь, что вы найдете это полезным. Я ценил поддержку каждого.
Шаг 1: // app.module.ts
imports: [
UsersModule,
GraphQLModule.forRoot({
// autoSchemaFile: true, did not work!
autoSchemaFile: join(process.cwd(), 'src/schema.gql'),
// schema.gql will automatically be created
debug: true,
playground: true,
}),
],
providers: [AppResolver], // all resolvers & service should be in providers
шаг 2:
Убедитесь, что у вас есть хотя бы один запрос bcz Mutation недостаточно, если вы не запустите игровую площадку GraphQL. Подробнее здесь
иногда helmet
вызывает ту же проблему. если у вас загружен шлем в качестве промежуточного программного обеспечения, это, вероятно, также может вызвать это.
отключение шлема решает проблему в NestJs, но мне интересно, что ее вызывает? И если это проблема, то есть ли возможность отключить шлем в режиме разработки?
Шлем был проблемой и в моем случае
Кто-нибудь знает, почему шлем вызывает эту проблему?
Мне помогло удаление папки dist и перезапуск приложения.
Проверьте, какой у вас
process.env.NODE_ENV
. Если этоPRODUCTION
, то я думаю, чтоapollo-server
отключает игровую площадку. Если нет, попробуйте явно добавитьplayground: true