【问题标题】:Apollo server playground not working on heroku (Working Locally)Apollo 服务器游乐场无法在 heroku 上运行(在本地工作)
【发布时间】:2019-09-10 12:37:04
【问题描述】:

我正在尝试在 heroku 上部署 run node js 应用程序,它已成功部署,但 Playground 似乎不起作用。

我通过设置 introspection: true: https://github.com/apollographql/apollo-server/issues/1718 来解决这个解决方案,但这似乎也不起作用。

heroku 日志

我的代码:

package.json

{
  "name": "travelindiaserver",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "clean": "rm -rf build && mkdir build",
    "build-babel": "babel -d ./build ./src -s",
    "build": "npm run clean && npm run build-babel",
    "start": "npm run build && node ./build/index.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "apollo-server-express": "^2.4.8",
    "babel-preset-env": "^1.7.0",
    "express": "^4.16.4",
    "graphql": "^14.2.1"
  },
  "devDependencies": {
    "babel-cli": "^6.26.0"
  }
}

index.js

import express from "express";
import { ApolloServer } from "apollo-server-express";

import typeDefs from "./schema";
import resolvers from "./resolvers";
import models from "./models";

const app = express();

const server = new ApolloServer({
  typeDefs,
  resolvers,
  context: { models },
  introspection: true
});

server.applyMiddleware({ app });

const PORT = process.env.PORT || 5000;

app.listen(PORT, () =>
  console.log(
    `???? Server ready at http://localhost:${PORT}${server.graphqlPath}`
  )
);

模型/index.js

const cities = [{ name: "City 1" }, { name: "City 2" }];

export default {
  cities
};

解析器/cityResolvers.js

export default {
  Query: {
    cities: (parent, args, { models }) => {
      return models.cities;
    }
  }
};

解析器/index.js

import cityResolvers from "./cityResolvers";

export default [cityResolvers];

schema/city.js

import { gql } from "apollo-server-express";

export default gql`
  extend type Query {
    cities: [City]
  }

  type City {
    name: String
  }
`;

架构/index.js

import { gql } from "apollo-server-express";

import citySchema from "./city";

const linkSchema = gql`
  type Query {
    _: Boolean
  }

  type Mutation {
    _: Boolean
  }

  type Subscription {
    _: Boolean
  }
`;

export default [linkSchema, citySchema];

【问题讨论】:

    标签: node.js heroku ecmascript-6 apollo-server


    【解决方案1】:

    默认情况下,Apollo 服务器在使用 NODE_ENV=production 运行时会关闭自省和 Playground。由于 Heroku 在您使用 node buildpack 时默认设置它,因此您的 Playground 被禁用。

    要绕过您需要传递给 apollo-server 2 选项的问题:

    const server = new ApolloServer({
      introspection: true,
      playground: true
    });
    

    【讨论】:

      猜你喜欢
      • 2021-11-01
      • 2020-01-05
      • 2016-09-15
      • 2013-08-22
      • 2021-04-28
      • 2021-08-28
      • 1970-01-01
      • 2016-11-05
      • 2021-08-25
      相关资源
      最近更新 更多