Регистр выброса функции server.register () отсутствует, хотя я правильно зарегистрировал плагины для graphql

Я создал проект node js с графом ql (с очень простой схемой), но когда я пытаюсь запустить сервер после регистрации плагинов для graphql и graphiql, я получаю ошибку в регистре отсутствует. Ниже мой код

const hapi=require('hapi');
const { graphqlHapi, graphiqlHapi } = require('apollo-server-hapi');
const { makeExecutableSchema } = require('graphql-tools');

const graphqlSchema = require('./graphql/schema');
const createResolvers = require('./graphql/resolvers');

const executableSchema = makeExecutableSchema({
    typeDefs: [graphqlSchema],
    resolvers: createResolvers(),
});

const server=hapi.server({
    port: 4000,
    host:'localhost'
});

server.register({
    plugin: graphqlHapi,
    options: {
      path: '/graphql',
      graphqlOptions: () => ({
        pretty: true,
        schema: executableSchema,
      }),
    },
});  

server.register({

    plugin: graphiqlHapi,
    options: {
      path: '/graphiql',
      graphiqlOptions: {
        endpointURL: '/graphql',
      },
    },
});

const init= async()=>{
    routes(server);
    await server.start();
    console.log(`Server is running at: ${server.info.uri}`);
}
init();

Изначально в функциях server.register () я дал имя ключа как register, а не как plugin. В любом случае я получаю следующую ошибку

(узел: 19104) DeprecationWarning: текущий синтаксический анализатор строки URL устарел и будет удален в будущей версии. Чтобы использовать новый синтаксический анализатор, передайте параметр {useNewUrlParser: true} в MongoClient.connect.

(узел: 19104) UnhandledPromiseRejectionWarning: AssertionError [ERR_ASSERTION]: недопустимые параметры плагина {

"plugin": {"options": {"path": "/ graphql", "graphqlOptions": () => ({\ r \ n pretty: true, \ r \ n schema: exe cutableSchema, \ r \ n })}, "регистр" [1]: - отсутствует -}}

Пожалуйста, помогите мне понять, когда это происходит в коде и как это можно исправить.

Ниже приведены зависимости в моем проекте

apollo-server-hapi ":" ^ 2.3.1 "," graphql ":" ^ 14.0.2 "," graphql-tools ":" ^ 4.0.3 "," hapi ":" ^ 17.8.1 ",

ИЗМЕНИТЬ Код после внесения предлагаемых изменений

const hapi=require('hapi');
const { graphqlHapi, graphiqlHapi } = require('apollo-server-hapi');
const { makeExecutableSchema } = require('graphql-tools');
const graphqlSchema = require('./graphql/schema');
const createResolvers = require('./graphql/resolvers');
const executableSchema = makeExecutableSchema({
    typeDefs: [graphqlSchema],
    resolvers: createResolvers(),
  });
async function start_server() {

    const server=hapi.server({
        port: 4000,
        host:'localhost'
    });

    await server.register({
        plugin: graphqlHapi,
        options: {
        path: '/graphql',
        graphqlOptions: () => ({
            pretty: true,
            schema: executableSchema,
        }),
        route: {
            cors: true,
        },
        },

    });

    await server.register({

        plugin: graphiqlHapi,
        options: {
        path: '/graphiql',
        graphiqlOptions: {
            endpointURL: '/graphql',
        },
        route: {
            cors: true,
        },
        },

    });

    try {    
        await server.start();
        console.log(`Server is running at: ${server.info.uri}`);
    } catch (err) {
        console.log(`Error while starting server: ${err.message}`)
    }
}


start_server();

person Tech de Enigma    schedule 07.01.2019    source источник
comment
Вам, вероятно, следует дождаться каждого register вызова перед вызовом server.start, но это может не иметь отношения к ошибке, которую вы видите. В Github есть открытая проблема для этой ошибки: github.com/apollographql/apollo-server/ issues / 758   -  person Daniel Rearden    schedule 07.01.2019
comment
@DanielRearden, я добавил ожидание и внес изменения, упомянутые в проблеме с github, изменив регистр на плагин. Пожалуйста, найдите отредактированный код в исходном вопросе под заголовком РЕДАКТИРОВАТЬ   -  person Tech de Enigma    schedule 08.01.2019


Ответы (1)


Нет необходимости регистрировать плагины в последней версии apollo-server-hapi. Он содержит площадку GraphQL вместо graphiql.

Приведенные ниже изменения необходимо внести вместо регистрации.

const {ApolloServer} = require('apollo-server-hapi');
const executableSchema = makeExecutableSchema({
    typeDefs: [graphqlSchema],
    resolvers: createResolvers(),
  });


const server = new ApolloServer({
    schema:executableSchema
  });

async function start_server() {

    const app=hapi.server({
        port: 4000,
        host:'localhost'
    });
    await server.applyMiddleware({ app });
    try {    
        await app.start();
        console.log(`Server is running at: ${app.info.uri}`);
    } catch (err) {
        console.log(`Error while starting server: ${err.message}`)
    }
}


start_server();
person Tech de Enigma    schedule 10.01.2019
comment
У меня не работает. По какому URL-адресу он будет работать? - person Clement Hoang; 30.03.2019
comment
Площадка @ClementHoang graphql будет доступна по URL-адресу localhost: 4000 / graphql. - person Tech de Enigma; 01.04.2019