mirror of
https://github.com/hasura/graphql-engine.git
synced 2024-12-18 04:51:35 +03:00
79 lines
1.8 KiB
JavaScript
79 lines
1.8 KiB
JavaScript
|
const { ApolloServer, ApolloError } = require('apollo-server');
|
||
|
const gql = require('graphql-tag');
|
||
|
const { print } = require('graphql');
|
||
|
|
||
|
const allMessages = [
|
||
|
{ id: 1, name: "Clarke", msg: "Welcome to the team, Clarke"},
|
||
|
{ id: 2, name: "Alice", msg: "Welcome to the team, Alice"},
|
||
|
];
|
||
|
|
||
|
const typeDefs = gql`
|
||
|
|
||
|
interface Communication {
|
||
|
id: Int!
|
||
|
msg: String!
|
||
|
}
|
||
|
|
||
|
type Message implements Communication {
|
||
|
id: Int!
|
||
|
name: String!
|
||
|
msg: String!
|
||
|
errorMsg: String
|
||
|
}
|
||
|
|
||
|
type Query {
|
||
|
hello: String
|
||
|
message(id: Int!) : Message
|
||
|
}
|
||
|
`;
|
||
|
|
||
|
const resolvers = {
|
||
|
|
||
|
Message: {
|
||
|
errorMsg : () => {
|
||
|
throw new ApolloError("intentional-error", "you asked for it");
|
||
|
}
|
||
|
},
|
||
|
|
||
|
Query: {
|
||
|
hello: () => "world",
|
||
|
message: (_, { id }) => {
|
||
|
return allMessages.find(m => m.id == id);
|
||
|
}
|
||
|
},
|
||
|
Communication: {
|
||
|
__resolveType(communication, context, info){
|
||
|
if(communication.name) {
|
||
|
return "Message";
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
class BasicLogging {
|
||
|
requestDidStart({queryString, parsedQuery, variables}) {
|
||
|
const query = queryString || print(parsedQuery);
|
||
|
console.log(query);
|
||
|
console.log(variables);
|
||
|
}
|
||
|
|
||
|
willSendResponse({graphqlResponse}) {
|
||
|
console.log(JSON.stringify(graphqlResponse, null, 2));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const schema = new ApolloServer(
|
||
|
{ typeDefs,
|
||
|
resolvers,
|
||
|
extensions: [() => new BasicLogging()],
|
||
|
formatError: (err) => {
|
||
|
// Stack traces make expected test output brittle and noisey:
|
||
|
delete err.extensions;
|
||
|
return err;
|
||
|
} });
|
||
|
|
||
|
schema.listen({ port: process.env.PORT || 4001 }).then(({ url }) => {
|
||
|
console.log(`schema ready at ${url}`);
|
||
|
});
|