반응형

typeDefs 와 resolvers 를 작성하는 곳에 createAccount 폴더를 만든다.

 

그러고 createAccount 폴더 안에  createAccount.graphql , createAccount.js를만든다.

이거에 대한 설정은 블로그에 따로 기입해뒀다.

 

우선 Prisma는 데이터베이스에 관한 어려운 문제를 해결해주는 ORM이다.

 

createAccount.graphql의 코드는

type Mutation {
  createAccount(
    userName: String!
    email: String!
    firstName: String
    lastName: String
    bio: String
  ): User!
}

type Query {
  someting: String
}

  이렇게 작성한다. 왜 이렇게 했냐면 Prisma에서 제공하는 playground에 가보면

createUser에 대한 값으로 이런 값들을 받으라고 이미 만들어져있기 때문이다.

내가 설정만 하면 Mutation에 CRUD가 저절로 만들어준다. 정말 편리했다.

 

Query를 정의한 이유는 쿼리가 정의안되면 오류가 떠서 그냥 아무 쿼리나 정의했다.

 

이제 createAccount.js 의 코드를 보자 여기서 prisma를 이용해  graphql 에서 쉽게 데이터베이스에 

저장하는법을 배운다 .

import { prisma } from "../../../../generated/prisma-client";

export default {
  Mutation: {
    createAccount: async (_, args) => {
      const { userName, email, firstName = "", lastName = "", bio = "" } = args;
      const user = await prisma.createUser({
        userName,
        email,
        firstName,
        lastName,
        bio,
      });
      return user;
    },
  },
};

  우선 맨위에는 prisma-client에서 prisma를 import 해주는 코드를 작성한다 그래야 prisma를 사용할수있다.

endpoint는 유출이 되면 안되므로 작성은 하지 않겠다.

 

그리고 Mutation에서 createAccount 요청이 들어오면 async , await을 이용해서 비동기적으로 정보를 생성한다.

 

두번째 인자는 내가 전송한 내용의 객체가 전송된다. 

prisma.createUser(정보들)을 통해서 데이터베이스에 내용을 저장하게된다.

 

이렇게 작성하고 graphql의 playground에서 mutation을 통하면 계정이 생성된다!

계정생성을 아주 쉽게 할 수있어서 대박이었다.

반응형
반응형

오류내용:You are changing the type of a required field. The fields will be pre-filled with the value

 

만약 내가 데이터베이스에 이미 기존값이 있는데 새로운 필드를필수로 입력해야한다고 설정하려한다면 이런 내용의 오류가 날것이다.

그러면 어떻게 해결할 것인가?

 

 

 

1. 기존의 사용자들에게 새로운 필드의 값을 정해준다. 업데이트해준다

 

필수로 설정해야한다면 기존의 필드값이

loginSecret:String! 이었다면  loginSecret:String! @default(value) 이렇게 붙여주면 기존값들에는 값이 기본값이 들어가게된다. 이러면 오류는 해결된다.

 

 

 

2. 새로운 필드는 필수가 아니라고 설정한다.

 

->>만약 새로운 필드의 이름이 

loginSecret:String! 이었다면  ------------->>> loginSecret:String 이렇게 느낌표를 빼주라

 

반응형
반응형

 typeDefs를 정의하고 resolvers 를 정의하고 GraphQLServer( typeDefs,resolvers) 를 적어서 실행시키면 

한 파일에 너무 큰 용량이 들어가서 보기가 힘들다. 이걸 나누면 정말 편할거같다.

typeDefs 파일과 resolvers 파일들을 기능별로 나눌수있다면 얼마나 좋을까?

그렇게하기위해서는

 

우선 graphql-tools와 merge-graphql-schemas 를 설치해야한다.

 

import { makeExecutableSchema } from "graphql-tools";
import { fileLoader, mergeResolvers, mergeTypes } from "merge-graphql-schemas";
import path from "path";

const allTypes = fileLoader(path.join(__dirname,"/api/**/*.graphql"));
//이뜻은 api폴더 밑에 있는 모든 폴더 밑에 있는 모든 .graphql파일을 가져온다.
const allResolvers = fileLoader(path.join(__dirname, "/api/**/*.js"));
//이뜻은 api폴더 밑에 있는 모든 폴더 밑에 있는 모든 .js파일을 가져온다.

const schema = makeExecutableSchema({
  typeDefs: mergeTypes(allTypes),
  resolvers: mergeResolvers(allResolvers),
});

export default schema;

이렇게하면 schema를 통해서 server에는 

import schema from "schema" 를해주고

 

GraphQLServer({schema}) 이렇게만 적으면 끝이다.

이러면 모든 api폴더 안에 생기는 폴더 내부의 graphql은 typeDefs로

js파일은 resolvers 로 역할을 할  수 있다.

 

예를들어 인사에 관한 폴더를 만들고 그 내부에

인사.graphql

인사.js 를 만든다 

인사.graphql에서는

type Query{
	hello:String!
}

 

이라고하고 인사.js에서

export default{
	Query:{
    	hello:()=>"Hi"
    }
}

이렇게 생성한다면 서버를 재시작하면 이런 쿼리들이 만들어질것이다.

반응형
반응형

yarn start 했는데 이미 사용중이라고 에러가 떳다.
->다른 프로세스가 실행중이거나 이전에 비정상적으로 종료된 경우에 흔히나타나는증상이라고한다. 


 

Windows에서의 해결법

- cmd창을연다

- netstat -ano를 입력하여 4000번 포트를 사용하는 프로세스 id인 Pid값을 알아낸다.

- 작업관리자를 연다 -->세부정보를 들어간다. -->PID 를 클릭해서 4000번 포트에 id값인 PID값을 찾아서 작업끝내기를 누른다. 

 

-다시 yarn start한다.

반응형

+ Recent posts