Notice
Recent Posts
Recent Comments
Link
보조기억장치
Apollo Server 시작하기 본문
## 프로젝트 생성
mkdir graphql-server-example
cd graphql-server-example
npm init -y
npm pkg set type="module"
package.json 파일 생성
{
"name": "graphql-server-example",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"type": "module"
}
## 종속성 설치
npm install @apollo/server graphql
## GraphQL 스키마 생성
export const typeDefs = `#graphql
type Game {
id: ID!
title: String!
platform: [String!]!
reviews: [Review!]
}
type Review {
id: ID!
rating: Int!
content: String!
game: Game!
author: Author!
}
type Author {
id:ID!
name: String!
verified: Boolean!
reviews: [Review!]
}
type Query {
reviews: [Review]
review(id: ID!): Review
games: [Game]
game(id: ID!):Game
authors: [Author]
author(id: ID!):Author
}
type Mutation {
addGame(game: AddGameInput!): Game
deleteGame(id: ID!): [Game]
updateGame(id: ID!, edits:EditGameInput): Game
}
input AddGameInput {
title: String!,
platform: [String!]!
}
input EditGameInput {
title: String,
platform: [String!]
}
`;
## resolvers 및 server
import { ApolloServer } from "@apollo/server";
import { startStandaloneServer } from "@apollo/server/standalone";
// db
import db from "./_db.js";
// types
import { typeDefs } from "./schema.js";
const resolvers = {
Query: {
games() {
return db.games;
},
game(_, args) {
return db.games.find((game) => game.id === args.id);
},
authors() {
return db.authors;
},
author(_, args) {
return db.authors.find((author) => author.id === args.id);
},
reviews() {
return db.reviews;
},
review(_, args) {
return db.reviews.find((review) => review.id === args.id);
},
},
Game: {
reviews(parent) {
return db.reviews.filter((r) => r.game_id === parent.id);
},
},
Author: {
reviews(parent) {
return db.reviews.filter((r) => r.author_id === parent.id);
},
},
Review: {
author(parent) {
return db.authors.find((a) => a.id === parent.author_id);
},
game(parent) {
return db.games.find((g) => g.id === parent.game_id);
},
},
Mutation: {
deleteGame(_, args) {
db.games = db.games.filter((g) => g.id !== args.id);
return db.games;
},
addGame(_, args) {
let game = {
...args.game,
id: Math.floor(Math.random() * 10000).toString(),
};
db.games.push(game);
return game;
},
updateGame(_, args) {
db.games = db.games.map((g) => {
if (g.id === args.id) {
return { ...g, ...args.edits };
}
return g;
});
return db.games.find((g) => g.id === args.id);
},
},
};
// server setup
const server = new ApolloServer({
typeDefs,
resolvers,
});
const { url } = await startStandaloneServer(server, {
listen: {
port: 4000,
},
});
console.log(`Server ready at port: ${url}`);