Невозможно прочитать свойство'arsWith 'из неопределенного в Object.renderGraphiQL - PullRequest
0 голосов
/ 04 мая 2018

Я изучал GraphQL от udemy,

https://www.udemy.com/introduction-to-graphql-and-apollo-building-modern-apis

И я изучал руководство по работе с GraphQL и Graphiql -> Apollo -Express - сервером. И получил это. Эта конкретная ошибка не была определена в видео. Это бесплатный учебник и лекция 9 имеет это. Что делать? я не нашел решения. Пожалуйста, помогите.

TypeError: Cannot read property 'startsWith' of undefined
at Object.renderGraphiQL (/home/dell/Desktop/graphql- 
tutorial/node_modules/apollo-server-module- 
graphiql/src/renderGraphiQL.ts:48:17)
at Object. (/home/dell/Desktop/graphql-tutorial/node_modules/apollo- 
server-module-graphiql/src/resolveGraphiQLString.ts:62:10)
at step (/home/dell/Desktop/graphql-tutorial/node_modules/apollo- 
server-module-graphiql/dist/resolveGraphiQLString.js:32:23)
at Object.next (/home/dell/Desktop/graphql- 
tutorial/node_modules/apollo-server-module- 
graphiql/dist/resolveGraphiQLString.js:13:53)
at fulfilled (/home/dell/Desktop/graphql-tutorial/node_modules/apollo- 
server-module-graphiql/dist/resolveGraphiQLString.js:4:58)
 at 
 at process._tickDomainCallback (internal/process/next_tick.js:228:7)

renderGraphiQLString.js

Это строка с ошибкой ->

 export function renderGraphiQL(data: GraphiQLData): string {
 const endpointURL = data.endpointURL;
 const endpointWs =
  endpointURL.startsWith('ws://') || endpointURL.startsWith('wss://');
  const subscriptionsEndpoint = data.subscriptionsEndpoint;
  const usingHttp = !endpointWs;
  const usingWs = endpointWs || !!subscriptionsEndpoint;
  const endpointURLWs =
  usingWs && (endpointWs ? endpointURL : subscriptionsEndpoint);

resolveGraphiQLString.js

 export async function resolveGraphiQLString(
 query: any = {},
 options: GraphiQLData | Function,
  ...args
  ): Promise<string> {
  const graphiqlParams = createGraphiQLParams(query);
  const graphiqlOptions = await resolveGraphiQLOptions(options, 
  ...args);
   const graphiqlData = createGraphiQLData(graphiqlParams, 
   graphiqlOptions);
   return renderGraphiQL(graphiqlData);
  }

server.js

 import express  from 'express';
 import {graphqlExpress,graphiqlExpress} from 'apollo-server-express';
 import bodyParser from 'body-parser';
 import schema  from './schema.js'


  const server = express();

  server.use('/graphql', bodyParser.json(), graphqlExpress(schema));

  server.use('/graphiql', graphiqlExpress({ endpointURL: '/graphql' 
   }));


 server.listen(4000,() =>{
 console.log('listening  on port 4000');
 });

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Я делал то же самое руководство и застрял с той же ошибкой. Я только сейчас получил это работает. Для меня я записал endpointURL как endpointUrl, потому что мне кажется глупым использовать в заглавных буквах аббревиатуры, но, конечно, это специфический ключ, он должен быть написан правильно.

Для вас единственное отличие, которое я вижу в коде, состоит в том, что я думаю, что вы должны передать {schema} в graphqlExpress, но вы передаете просто schema. Вот как у меня это получается:

server.use("/graphql", bodyParser.json(), graphqlExpress({ schema }))

0 голосов
/ 05 мая 2018

Ваш код неверен. Чтобы определить конечную точку graphiql, вам нужно сделать это следующим образом:

const server = express();
server.use('/graphql', bodyParser.json(), graphqlExpress(schema));
server.use('/graphiql', graphiqlExpress({ endpointURL: '/graphql' }));

Имейте в виду, что вы должны передать методу graphiqlExpress конечную точкуURL вашей реальной конечной точки graphql.

ура!

...