gpt4 book ai didi

node.js - server.register() 函数抛出 "register is missing",即使我已经正确注册了 graphql 的插件

转载 作者:搜寻专家 更新时间:2023-11-01 00:49:37 26 4
gpt4 key购买 nike

我已经使用 graph ql(具有非常基本的模式)创建了一个 Node js 项目,但是当我在为 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。无论哪种情况,我都会收到以下错误

(node:19104) DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version. To use the new parser, pass option { useNewUrlParser: true } to MongoClient.connect.

(node:19104) UnhandledPromiseRejectionWarning: AssertionError [ERR_ASSERTION]: I nvalid plugin options {

"plugin": { "options": { "path": "/graphql", "graphqlOptions": () => ({\r\n pretty: true,\r\n schema: exe cutableSchema,\r\n }) }, "register" [1]: -- missing -- } }

请帮助我了解代码何时会发生这种情况以及如何纠正它。

下面是我项目中的依赖

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();

最佳答案

无需在最新版本的 apollo-server-hapi 中注册插件。它包含 GraphQL playground 而不是 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();

关于node.js - server.register() 函数抛出 "register is missing",即使我已经正确注册了 graphql 的插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54068557/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com