[typescript] 타입스크립트와 GraphQL을 함께 사용하는 파일 다운로드 방법
이번 포스트에서는 타입스크립트와 GraphQL을 사용하여 파일을 다운로드하는 방법에 대해 알아보겠습니다.
필요한 패키지 설치
이 기능을 구현하기 위해 먼저 필요한 패키지들을 설치해야 합니다.
npm install axios graphql
여기서 axios는 HTTP 요청을 보낼 때 사용하며, graphql은 GraphQL 요청을 보내기 위한 라이브러리입니다.
파일 다운로드 함수 작성
이제 파일을 다운로드하는 함수를 작성해보겠습니다.
import axios from 'axios';
import { print } from 'graphql';
import { createWriteStream } from 'fs';
import { request } from 'http';
import { RequestOptions } from 'https';
const downloadFile = async (url: string, query: any, variables: any, filePath: string) => {
const queryStr = print(query);
const options: RequestOptions = {
method: 'post',
headers: {
'Content-Type': 'application/json',
},
data: {
query: queryStr,
variables,
},
url,
responseType: 'stream',
};
const response = await axios(options);
response.data.pipe(createWriteStream(filePath));
};
위 코드에서 downloadFile 함수는 파일의 URL, GraphQL 쿼리, 변수, 그리고 저장될 파일 경로를 인자로 받아서 파일을 다운로드합니다.
사용 예제
이제 작성한 함수를 사용하는 예제를 살펴보겠습니다.
import { gql } from 'graphql-tag';
const fileDownloadQuery = gql`
query($fileId: ID!) {
getFile(fileId: $fileId) {
url
metadata {
filename
}
}
}
`;
const fileId = '12345'; // 다운로드할 파일의 ID
const filePath = '/path/to/save/file.jpg'; // 저장될 파일의 경로
const download = async () => {
await downloadFile('http://your-graphql-api.com', fileDownloadQuery, { fileId }, filePath);
};
download();
위 예제에서는 GraphQL 쿼리를 사용하여 파일의 URL을 가져온 후, 이를 downloadFile 함수에 전달하여 파일을 다운로드하는 과정을 보여줍니다.
이제 여러분도 타입스크립트와 GraphQL을 함께 사용하여 파일을 다운로드하는 방법에 대해 알게 되었습니다.
참고: axios 공식 문서, graphql 공식 문서
Happy coding!