node -v : v16.15.1
npm -v : 8.11.0
package.json
{
"name": "graphql",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "nodemon node index.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"apollo-server-express": "^3.10.0",
"express": "^4.18.1",
"graphql": "^16.5.0",
"nodemon": "^2.0.19"
}
}
필요한 패키지는 apollo-server-express, express, graphql 이다
nodemon 도 부가기능으로 설치할것이다.
npm install apollo-server-express express graphql nodemon
index.js
const express = require('express');
const { ApolloServer, gql } = require('apollo-server-express');
// Run the server on a port specified in our .env file or port 4000
const port = process.env.PORT || 4000;
let notes = [
{
id: '1',
content: 'This is a note',
author: 'Adam Scott'
},
{
id: '2',
content: 'This is another note',
author: 'Harlow Everly'
},
{
id: '3',
content: 'Oh hey look, another note!',
author: 'Riley Harrison'
}
];
// 그래프QL 스키마 언어로 스키마를 구성
const typeDefs = gql`
type Note {
id: ID
content: String
author: String
}
type Query {
hello: String
notes: [Note]
note(id: ID): Note
}
type Mutation {
newNote(content: String!): Note
}
`;
// 스키마 필드를 위한 리졸버 함수 제공
const resolvers = {
Query: {
hello: () => 'Hello world!',
notes: () => notes,
note: (parent, args) => {
return notes.find(note => note.id === args.id);
}
},
Mutation: {
newNote: (parent, args) => {
let noteValue = {
id: String(notes.length + 1),
content: args.content,
author: 'Adam Scott'
};
notes.push(noteValue);
return noteValue;
}
}
};
// 아폴로 서버 설정
const server = new ApolloServer({ typeDefs, resolvers });
const app = express();
server.start().then(res => {
// 아폴로 그래프QL 미들웨어를 적용하고 경로를 /api 로 설정
server.applyMiddleware({ app, path: '/api' });
app.listen({ port }, () =>
console.log(
`GraphQL Server running at http://localhost:${port}${server.graphqlPath}`
)
);
})
// https://javascriptsu.wordpress.com/2021/08/02/apollo-error-must-await-server-start/
index.js 에서 notes, typeDefs, resolvers 내용은 예시마다 다를것이다.
나머지는 비슷하지만 마지막 부분인 server.start().then 부분은 아래 링크 출처를 보고 수정하였다.
이제 서버를 가동해보자
PS C:\Users\xxx\Documents\webstormprojects\graphql> npm run dev
npm WARN config global `--global`, `--local` are deprecated. Use `--location=global` instead.
> graphql@1.0.0 dev
> nodemon node index.js
[nodemon] 2.0.19
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node node index.js`
GraphQL Server running at http://localhost:4000/api
query 를 날려보자
query {
hello
}
query {
notes {
id
author
content
}
}
#nodejs #express #apollo-server-express #graphql #연동 #node #npm #16버전 #node16버전
반응형
'2022 > JavaScript EveryWhere' 카테고리의 다른 글
mongoose, MonogoDB 연동 (0) | 2022.07.13 |
---|