缺少 GET 查询:在 Express 服务器上使用 Apollo 实现 GraphQL

Bug*_*ddy 7 node.js express apollo graphql apollo-server

我正在遵循此处的教程:在 Express 服务器上使用 Apollo 实现 GraphQL ,并且我在浏览器中收到错误GET 查询丢失http://localhost:7700/graphql

首先我自己输入了所有代码。当我遇到错误时,我从GitHub下载了代码:kimobrian/GraphQL-Express:使用GraphQL实现的Express Server,以消除我犯错误的可能性。但是,我仍然遇到同样的错误。

我认为最好提供存储库的链接,而不是将代码粘贴到此处,因为我使用存储库中的相同代码。另外,我不确定哪个文件可能包含问题。

$ npm start

> tutorial-server@1.0.0 start kimobrian/GraphQL-Express.git
> nodemon ./server.js --exec babel-node -e js

[nodemon] 1.18.9
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `babel-node ./server.js`
GraphQL Server is now running on http://localhost:7700
Run Code Online (Sandbox Code Playgroud)

错误是浏览器中http://localhost:7700/graphql缺少 GET 查询。Firefox 和 Chromium 中也是如此。

更新:我发现的相关信息的唯一问题在这里:nodejs with Graphql。建议的解决方案是

server.use('/graphiql', graphiqlExpress({
  endpointURL: '/graphql',
}));
Run Code Online (Sandbox Code Playgroud)

然而,这正是我已经拥有的代码(来自教程)。这是我的全部server.js

import express from 'express';
import cors from 'cors';

import {
    graphqlExpress,
    graphiqlExpress,
} from 'graphql-server-express';

import bodyParser from 'body-parser';

import { schema } from './src/schema';

const PORT = 7700;
const server = express();
server.use('*', cors({ origin: 'http://localhost:7800' }));

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

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

server.listen(PORT, () =>
    console.log(`GraphQL Server is now running on http://localhost:${PORT}`)
);
Run Code Online (Sandbox Code Playgroud)

Dan*_*den 2

自该教程编写以来,API 和包名称本身都发生了变化(包现在是apollo-server-express)。您不再需要导入corsbody-parser. 最简单的开始方法就是使用 apollo-server:

const server = new ApolloServer({ typeDefs, resolvers });

const port = 7700;

server.listen({ port });
Run Code Online (Sandbox Code Playgroud)

如果您仍然想自己应用其他中间件,您可以使用apollo-server-express

const server = new ApolloServer({ typeDefs, resolvers });

const app = express();
server.applyMiddleware({ app });

const port = 7700;

app.listen({ port });
Run Code Online (Sandbox Code Playgroud)

请查看官方文档了解更多详细信息。