오늘은 Grapgql api docs 만드는 법을 배웠다.
거기에 저번에 만들어 두었던 휴대폰 인증번호 보내기함수를 이용했다.
Graphql의 라이브러리인 Apollo server를 이용했다.
graphql에서는 Type과 Resolvers가 중요하다
type에서 어떤 타입인지 정해주고
const typeDefs = gql`
type BoardReturn {
number: Int
writer: String
title: String
contents: String
}
resolvers에서` 내용을 리턴해준다
Resolver란 클라이언트로부터 요청된 Query 혹은 Mutation에 대해 반환할 결과를 생성하는 로직이다. GraphQL 서버가 Resolver를 찾아 Query와 Mutation에 해당하는 함수를 실행합니다.
Query나 Mutation에서 넘어온 인자가 객체의 형태로 전달되기 때문에 ( _, { arg1, arg2, ... } )의 형태로 인자를 넘겨받아 사용하는 특징이 있다.
const resolvers = {
Query: {
// 데이터베이스에서 데이터를 꺼내오는 로직
fetchBoards: (_, args) => {
return [
{number:1, writer: "철수", title:"제목", contents: "내용"},
{number:2, writer: "철수", title:"제목", contents: "내용"},
{number:3, writer: "철수", title:"제목", contents: "내용"},
{number:4, writer: "철수", title:"제목", contents: "내용"}
]
}
}
Scalar - 단일 값을 저장합니다.
Object - 데이터의 객체 구조를 보여준다
Query - 특정 타입들의 entry point 역할
Mutation - 데이터를 조작하는 entry point 역할
Enum - 열거형 타입. 목록 중에 선택해야 하는 상황에서 사용
List - []를 사용해서 정의할 수 있다
Non-Nullable - 정의된 타입 뒤에 ! 를 붙여서 표현한다. null이 될 수 없으므로 무조건 값을 리턴해줘야 한다.
// const { ApolloServer, gql } = require('apollo-server');
import { ApolloServer, gql } from 'apollo-server'
import{ sendTokenTOSMS, getToken, checkValidationPhone } from './phone.js'
// The GraphQL schema
const typeDefs = gql`
type BoardReturn {
number: Int
writer: String
title: String
contents: String
}
input CreateBoardInput {
writer: String
title: String
contents: String
}
type Query {
# fetchBoards: BoardReturn => 객체 1개의미
fetchBoards: [BoardReturn] # =>배열안의 1개 이상
}
type Mutation {
createBoard(CreateBoardInput : CreateBoardInput!) : String
creatTokenOfPhone( myphone : String ) : String
}
`;
// A map of functions which return data for the schema.
onst resolvers = {
Query: {
// 데이터베이스에서 데이터를 꺼내오는 로직
fetchBoards: (_, args) => {
return [
{number:1, writer: "철수", title:"제목", contents: "내용"},
{number:2, writer: "철수", title:"제목", contents: "내용"},
{number:3, writer: "철수", title:"제목", contents: "내용"},
{number:4, writer: "철수", title:"제목", contents: "내용"}
]
}
},
Mutation: {
// 데이터베이스에서 데이터를 저장하는 로직
createBoard: (parentm,args, context, info) => {
return "등록성공"
},
creatTokenOfPhone: (_, args) => {
const myphone = args.myphone
const isValid = checkValidationPhone(args.myphone)
if(isValid) {
// 2. 핸드폰 토큰 6자리 만들기
const myToken = getToken(4)
// 3. 핸드폰 번호에 토큰 전송하기
sendTokenTOSMS(args.myphone, myToken)
}
return "인증완료"
}
}
};
const server = new ApolloServer({
typeDefs,
resolvers
});
server.listen(4000).then(({ url }) => {
console.log(`🚀 Server ready at ${url}`);
});
Mutation 휴대폰인증을 위해 필요한 number을 필요하다고 쓰고
CreateBoardInput을 통해 여러가지 프로퍼티를 쓰는 법도 배웠다 .
apollo - server와 express를 써볼수있어 좋았다
? 연산자 if문과 비슷함
데이터 타입을 알 수 있는 매소드
type of
※isNaN(undefined) - true
Number.isNaN(undefined) - false
큰 수 구하는 방법
function bigNum( str ){
console.log( Math.max(...[1,2,3,4,5,6,]))
}