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

Posted

技术标签:

【中文标题】缺少 GET 查询:在 Express 服务器上使用 Apollo 实现 GraphQL【英文标题】:GET query missing: Implementing GraphQL Using Apollo On an Express Server 【发布时间】:2019-06-13 09:05:24 【问题描述】:

我正在按照这里的教程进行操作:Implementing GraphQL Using Apollo On an Express Server,我在浏览器http://localhost:7700/graphql 中收到错误GET query missing

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

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

$ 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 在浏览器中缺少GET 查询。在 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`)
);

【问题讨论】:

检查你的包版本。看来您的软件包名称已更改为 require('apollo-server-express') npmjs.com/package/graphql-server-express。用这个在 Express 上集成 GraphQL graphql.org/graphql-js/running-an-express-graphql-server 【参考方案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。

【讨论】:

我遇到了同样的问题。我已按照 -npmjs.com/package/apollo-server-fastify 的步骤进行操作。在点击localhost:3000/graphql 时,它给了我“缺少查询”。请帮忙 @khushboo29 请使用所有相关代码打开一个新问题。 是的,我开了一个 - ***.com/questions/63072227/…【参考方案2】:

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

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

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

找到here。

【讨论】:

以上是关于缺少 GET 查询:在 Express 服务器上使用 Apollo 实现 GraphQL的主要内容,如果未能解决你的问题,请参考以下文章

VS Express 安装中缺少几个系统库

jquery ajax响应中缺少responseJSON

基于 GET 参数的 Express/Mongoose REST API 路由

通过 Braintree SDK 的 Paypal Express Checkout 突然失败(缺少服务商 REST API 应用程序?)

express 无法从 url 获取查询参数 [重复]

Express框架请求处理机制