Apollo 服务器游乐场无法在 heroku 上运行(在本地工作)
Apollo server playground not working on heroku (Working Locally)
我正在尝试在 heroku 上部署 运行 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}`
)
);
models/index.js
const cities = [{ name: "City 1" }, { name: "City 2" }];
export default {
cities
};
resolvers/cityResolvers.js
export default {
Query: {
cities: (parent, args, { models }) => {
return models.cities;
}
}
};
resolvers/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
}
`;
schema/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];
默认情况下,Apollo 服务器会在 运行 NODE_ENV=production
时关闭自省和 playground。由于 Heroku 在您使用 node buildpack
时默认设置它,因此您的 playground 被禁用。
要解决这个问题,您需要传递给 apollo-server 2 选项:
const server = new ApolloServer({
introspection: true,
playground: true
});
我正在尝试在 heroku 上部署 运行 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}`
)
);
models/index.js
const cities = [{ name: "City 1" }, { name: "City 2" }];
export default {
cities
};
resolvers/cityResolvers.js
export default {
Query: {
cities: (parent, args, { models }) => {
return models.cities;
}
}
};
resolvers/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
}
`;
schema/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];
默认情况下,Apollo 服务器会在 运行 NODE_ENV=production
时关闭自省和 playground。由于 Heroku 在您使用 node buildpack
时默认设置它,因此您的 playground 被禁用。
要解决这个问题,您需要传递给 apollo-server 2 选项:
const server = new ApolloServer({
introspection: true,
playground: true
});