uliftGE / ts-24-weather-openApi

타입스크립트 24강 코드입니다. api 실습을 위해 opne api 사용 코드를 제작했습니다.
0 stars 0 forks source link

코드 개선사항 #1

Open rmdnps10 opened 5 days ago

rmdnps10 commented 5 days ago

env.d.ts

declare namespace NodeJS {
  interface ProcessEnv {
    API_KEY: string;
  }
}

fetch.ts

import axios, { AxiosResponse } from 'axios';
import { WeatherData } from './type';

const BASE_URL = 'https://api.openweathermap.org/data/2.5';
const LAT = 37.65590833; // 지역의 위도를 넣어주세요!
const LON = 126.7770556; // 지역의 경도를 넣어주세요!
const API_KEY = process.env.API_KEY;

if (!API_KEY) {
  throw new Error(
    'API_KEY가 누락되었습니다.'
  );
}

export const weatherApi = {
  getWeatherByCity: async (): Promise<WeatherData> => {
    try {
      const url = `${BASE_URL}/weather?lat=${LAT}&lon=${LON}&appid=${API_KEY}`;
      const response: AxiosResponse<WeatherData> = await axios.get<WeatherData>(
        url
      );
      return response.data;
    } catch (error) {
      if (axios.isAxiosError(error)) {
        const errorMessage =
          error.response?.data.message || 'API 요청 시 에러가 발생했습니다.';
        console.error(`API 요청 에러 : ${errorMessage}`);
      } else {
        console.error('예상하지 못한 에러 : ', error);
      }
      throw new Error('날씨 데이터 수집에 실패했습니다.');
    }
  },
};

API key 누락 여부 확인 isAxiosArror 로 에러 타입을 좁힘

WeatherDisplay는 수정사항 없습니다!

uliftGE commented 5 days ago

넵 반영해도 좋을 것 같습니다! 다만 코드 구성할 때 최대한 부가적인 기능을 추가한다든가 모듈화를 한다든가 하지 않으려고 노력했습니다! 가장 기본적인 api 구조여야 초보자 입장에서 익숙하기도 하고, 이해가 쉬울 것 같아서요! 감안하고 코드 봐주시면 될 것 같습니다!