Apollo-server-express 返回“无法获取 /”而不是 Graphql 操场

Posted

技术标签:

【中文标题】Apollo-server-express 返回“无法获取 /”而不是 Graphql 操场【英文标题】:Apollo-server-express returning "cannot Get /" instead of the Graphql playground 【发布时间】:2020-12-17 09:00:51 【问题描述】:

所以我的 server.js 和 schema.js 都有这个代码,来自 apollo doc 教程https://www.apollographql.com/docs/tutorial/introduction/

server.js

import apollo from "apollo-server-express";
const  ApolloServer  = apollo;
import express from "express";
import typeDefs from "./schema.js";

const app = express();
const server = new ApolloServer(
  typeDefs,
  playground: true,
);

server.applyMiddleware( app );

const PORT = process.env.PORT || 4000;
app.listen(PORT, () => 
  console.log(`operating on port $PORT`);
)

schema.js

import pkg from "apollo-server-express"
const  gql  = pkg

// defining schema
 const typeDefs = gql`
  type Launch 
    id: ID!
    site: String
    mission: Mission
    rocket: Rocket
    isBooked: Boolean!
  
  type Rocket 
    id: ID!
    name: String
    type: String
  

  type User 
    id: ID!
    email: String!
    trips: [Launch]!
  

  type Mission 
    name: String
    missionPatch(size: PatchSize): String
  

  enum PatchSize 
    SMALL
    LARGE
  
  type Query 
    launches: [Launch]!
    launch(id: ID!): Launch
    me: User
  
  type Mutation 
    bookTrips(launchIds: [ID]!): TripUpdateResponse!
    cancelTrip(launchId: ID!): TripUpdateResponse!
    login(email: String): String # login token
  
  type TripUpdateResponse 
    success: Boolean!
    message: String
    launches: [Launch]
  
`
export default typeDefs

我所做的唯一调整是选择导入/导出模块的 ES 模块方法,而不是文档中使用的 commonJS 方式,我认为这不应该是一个问题,它编译时没有错误,但没有得到 graphql 操场要查看我的架构,我会收到 cannot Get /

我还没有完成解析器,但在这一点上,我相信我应该已经看到操场在行动了。根据文档

【问题讨论】:

【参考方案1】:

使用applyMiddleware时,如果不明确指定路径,默认为/graphql

这意味着您将通过 localhost:$PORT/graphql 访问您的端点和 GraphQL Playground 界面,而不是 localhost:$PORT(根据错误消息,这是您正在执行的操作)。

【讨论】:

以上是关于Apollo-server-express 返回“无法获取 /”而不是 Graphql 操场的主要内容,如果未能解决你的问题,请参考以下文章

apollo-server-express:如何解决内部订阅问题?

Apollo-Server-Express 未收到上传对象

升级到 apollo-server-express 2.0.0 缺少上下文

是否可以将 apollo-server-express 部署到 lambda?

在 apollo-server-express 中增加身体限制大小

Apollo-server-express 内省已禁用,但仍然可以通过 websocket 连接