Apollo server 中创建的类默认被视为单例,因为它们可以用来共享状态和数据。以下是一个简单的示例:
const { ApolloServer, gql } = require('apollo-server');
class MyClass {
constructor() {
this.count = 0;
}
increment() {
this.count++;
}
getCount() {
return this.count;
}
}
const typeDefs = gql`
type Query {
getCount: Int
}
type Mutation {
incrementCount: Int
}
`;
const resolvers = {
Query: {
getCount: (_, __, context) => context.myClass.getCount(),
},
Mutation: {
incrementCount: (_, __, context) => {
context.myClass.increment();
return context.myClass.getCount();
},
},
};
const server = new ApolloServer({
typeDefs,
resolvers,
context: () => {
const myClass = new MyClass();
return { myClass };
},
});
server.listen().then(({ url }) => {
console.log(`Server ready at ${url}`);
});
在这个示例中,我们创建了一个名为 MyClass
的类,并在 context
中将其传递给 resolver。在 Query
和 Mutation
resolver 中,我们可以访问 MyClass
的实例并使用类的方法来操作状态。
由于 MyClass
在 context
中只创建了一次,所以它被视为单例并且可以在整个应用程序中共享。