概要
- Apollo serverのチュートリアルでつまづいたので共有
- 結論、バグっぽいのでダウングレードする or コードを書き直す
- 公式のissue(https://github.com/nestjs/graphql/issues/1621#issuecomment-878474079) で報告されている
環境
- macOS Monterey: 12.2.1
- "apollo-server-express": "^3.6.3",
- "express": "^4.17.3",
- "graphql": "^16.3.0",
## 試したコード
index.js
const express = require('express');
const { ApolloServer, gql } = require('apollo-server-express');
// Construct a schema, using GraphQL schema language
const typeDefs = gql`
type Query {
hello: String
}
`;
// Provide resolver functions for your schema fields
const resolvers = {
Query: {
hello: () => 'Hello world!',
},
};
const server = new ApolloServer({ typeDefs, resolvers });
const app = express();
server.applyMiddleware({ app });
app.listen({ port: 4000 }, () =>
console.log(`🚀 Server ready at http://localhost:4000${server.graphqlPath}`)
);
-
node index.js
を実行すると以下のエラーが出る
You must `await server.start()` before calling `server.applyMiddleware()`
解決方法
ダウングレード
- バージョンを2.xにすると大丈夫っぽい
コードの変更
以下のように変更
index.js
const express = require('express');
const { ApolloServer, gql } = require('apollo-server-express');
// Construct a schema, using GraphQL schema language
const typeDefs = gql`
type Query {
hello: String
}
`;
// Provide resolver functions for your schema fields
const resolvers = {
Query: {
hello: () => 'Hello world!',
},
};
async function startServer() {
apolloServer = new ApolloServer({
typeDefs,
resolvers,
});
await apolloServer.start();
apolloServer.applyMiddleware({ app });
}
startServer();
app.listen({ port: 4000 }, () =>
console.log(`🚀 Server ready at http://localhost:4000`)
);