缺少GET查询:在Express Server上使用Apollo实现GraphQL

时间:2019-01-19 07:58:53

标签: node.js express graphql apollo apollo-server

我在这里遵循本教程:Implementing GraphQL Using Apollo On an Express Server,并且在浏览器中http://localhost:7700/graphql遇到错误缺少查询

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

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

$ 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

错误是在浏览器的http://localhost:7700/graphql 缺少查询。在Firefox和Chromium中是相同的。

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

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

但是,这正是我已经拥有的代码(来自教程)。这是我的整个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}`)
);

2 个答案:

答案 0 :(得分:1)

自编写该教程以来,API和程序包名称本身均已更改(程序包现在为apollo-server-express)。您不再需要导入corsbody-parser。最简单的入门方法是实际上只使用apollo-server:

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

const port = 7700;

server.listen({ port });

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

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

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

const port = 7700;

app.listen({ port });

请检查the official docs以获得更多详细信息。

答案 1 :(得分:1)

我通过在 Apollo Server 构造函数中添加两个字段来修复它:playground: trueintrospection: true

const apolloServer = new ApolloServer({
  schema,
  context: (ctx: Context) => ctx,
  playground: true,
  introspection: true,
});

注意:请注意,应该正确设置 cors 以使您的 graphql 服务器能够响应请求。

找到 here