GraphQL-리졸버
Resolver는 GraphQL 쿼리에 대한 응답을 생성하는 함수 모음입니다. 간단히 말해서 리졸버는 GraphQL 쿼리 처리기 역할을합니다. GraphQL 스키마의 모든 리졸버 함수는 아래와 같이 4 개의 위치 인수를받습니다.
fieldName:(root, args, context, info) => { result }
리졸버 기능의 예는 다음과 같습니다.
//resolver function with no parameters and returning string
greeting:() => {
return "hello from TutorialsPoint !!!"
}
//resolver function with no parameters and returning list
students:() => db.students.list()
//resolver function with arguments and returning object
studentById:(root,args,context,info) => {
return db.students.get(args.id);
}
다음은 위치 인수와 설명입니다.
Sr. 아니. | 인수 및 설명 |
---|---|
1 | root 부모 필드의 확인자에서 반환 된 결과를 포함하는 개체입니다. |
2 | args 쿼리의 필드에 전달 된 인수가있는 개체입니다. |
삼 | context 이것은 특정 쿼리의 모든 해석기가 공유하는 객체입니다. |
4 | info 여기에는 필드 이름, 루트의 필드 경로 등 쿼리의 실행 상태에 대한 정보가 포함됩니다. |
확인자 결과 형식
GraphQL의 해석기는 아래와 같이 다양한 유형의 값을 반환 할 수 있습니다.
Sr. 아니. | 인수 및 설명 |
---|---|
1 | null or undefined 이것은 개체를 찾을 수 없음을 나타냅니다. |
2 | array 스키마가 필드의 결과가 목록이어야 함을 나타내는 경우에만 유효합니다. |
삼 | promise 리졸버는 종종 데이터베이스 또는 백엔드 API에서 가져 오기와 같은 비동기 작업을 수행하므로 프라 미스를 반환 할 수 있습니다. |
4 | scalar or object 리졸버는 다른 값을 반환 할 수도 있습니다. |
삽화
리졸버를 이해하기위한 간단한 애플리케이션을 만들어 보겠습니다. 이것은 서버에서 ID로 학생을 쿼리하기위한 스키마를 생성합니다. 학생 데이터는 플랫 파일에 저장되고 다음과 같은 노드 모듈을 사용합니다.notarealdb 데이터베이스를 위조하고 플랫 파일에서 읽습니다.
다음은 간단한 응용 프로그램을 만드는 단계별 프로세스입니다.
1 단계-프로젝트에 필요한 종속성 다운로드 및 설치
다음과 같은 폴더를 만듭니다. resolver-app. 디렉토리를 다음으로 변경하십시오.resolver-app터미널에서. 나중에 환경 설정 장의 3 ~ 5 단계를 따릅니다.
2 단계-스키마 생성
프로젝트 폴더 resolver-app에 schema.graphql 파일을 추가하고 다음 코드를 추가합니다.
type Query {
greeting:String
students:[Student]
studentById(id:ID!):Student
}
type Student {
id:ID!
firstName:String
lastName:String
password:String
collegeId:String
}
스키마 파일은 사용자가 greeting, students 및 studentById를 쿼리 할 수 있음을 보여줍니다 . 특정 ID를 가진 학생을 검색하려면data type ID!nullable이 아닌 고유 식별자 필드를 표시합니다. 학생들의 필드는 학생들의 배열을 반환하고, 인사 반환에게 간단한 문자열 값을.
3 단계-Resolver 생성
파일 생성 resolvers.js 프로젝트 폴더에 다음 코드를 추가하십시오-
const db = require('./db')
const Query = {
//resolver function for greeting
greeting:() => {
return "hello from TutorialsPoint !!!"
},
//resolver function for students returns list
students:() => db.students.list(),
//resolver function for studentbyId
studentById:(root,args,context,info) => {
//args will contain parameter passed in query
return db.students.get(args.id);
}
}
module.exports = {Query}
여기서 studentById 는 세 가지 매개 변수를받습니다. 이 장에서 설명했듯이 studentId 는 args에서 검색 할 수 있습니다. root에는 Query 개체 자체가 포함됩니다. 특정 학생을 반환하려면 students 컬렉션에서 id 매개 변수를 사용하여 get 메서드를 호출해야합니다.
여기서 인사말, students, studentById 는 쿼리를 처리하는 해결 자입니다.students resolver function데이터 액세스 레이어에서 학생 목록을 반환합니다. 모듈 외부에서 리졸버 기능에 액세스하려면 module.exports를 사용하여 Query 객체를 내 보내야합니다.
4 단계-애플리케이션 실행
server.js 파일을 만듭니다. 환경 설정 장의 8 단계를 참조하십시오. 터미널에서 npm start 명령을 실행합니다. 서버는 9000 포트에서 실행됩니다. 여기서는 GraphiQL을 클라이언트로 사용하여 애플리케이션을 테스트합니다.
브라우저를 열고 URL을 입력하십시오. http://localhost:9000/graphiql. 편집기에 다음 쿼리를 입력하십시오-
{
studentById(id:"S1001") {
id
firstName
lastName
}
}
위 쿼리의 출력은 다음과 같습니다.
{
"data": {
"studentById": {
"id": "S1001",
"firstName": "Mohtashim",
"lastName": "Mohammad"
}
}
}