inflearn logo
강의

Course

Instructor

Getting Started with Next.js - A Quick Look at the Official Documentation

Deploying a Service

안녕하세요! 서비스 배포를 하는데 에러가 생겨서 문의드립니다!

Resolved

544

ssi02014

14 asked

1

안녕하세요! 강의를 쭉 듣고, 배포 단계까지 왔는데 에러가 생겨서 진행이 안되어 문의드립니다!

vercel에서 에러는

image.png

Failed to compile.

src/app/[location]/page.tsx

Type error: Type 'Props' does not satisfy the constraint 'PageProps'.

Types of property 'params' are incompatible.

Type '{ location: string; }' is missing the following properties from type 'Promise<any>': then, catch, finally, [Symbol.toStringTag]

Error: Command "npm run build" exited with 1
이며, 그전에도

Route "/[location]" used params.location. params should be awaited before using its properties. Learn more:
위와 같은 에러가 떴고, 이는 경로 및 쿼리 파라미터를 위한 객체에서 런타임 에러가 뜨는걸로 확인했습니다! 강의를 똑같이 따라갔는데, 위와 같은 에러가 나는게 의아하여 한번 문의드립니다!

import HomeButton from "../components/HomeButton";
import { getForecast } from "../utils/getForecast";

type Props = {
  params: {
    location: string;
  };
  searchParams: {
    name: string;
  };
};

export function generateMetadata({ searchParams }: Props) {
  return {
    title: `날씨 앱 - ${searchParams.name}`,
    description: `${searchParams.name} 날씨를 알려드립니다`,
  };
}

export default async function Detail({ params, searchParams }: Props) {
  const name = searchParams.name;

  const res = await getForecast(params.location);

  return (
    <>
      <h1>{name}의 3일 예보</h1>
      <ul>
        {res.forecast.forecastday.map((day) => (
          <li key={day.date}>
            {day.date} / {day.day.avgtemp_c}
          </li>
        ))}
      </ul>
      <HomeButton />
    </>
  );
}


image.png

크리스마스 쉬는날 연락드려, 죄송하며 빠른 답변 부탁드립니다!

react typescript next.js next.js13

Answer 1

0

hajoeun

안녕하세요! 메리크리스마스 입니다!

배포 단계까지 오셨다니 고생 많으셨어요. 혹시 설치된 Next.js의 버전을 확인해주실 수 있을까요? 강의에서는 13.4.19 버전을 쓰고 있습니다. 그 이상 버전이 설치된 환경이라면 최신 문서 가이드를 참고하셔서 Props의 params를 Promise로 감싸보시면 해결될 것 같아요!

시도해보시고 다시 답변 남겨주세요.

1

ssi02014

공식문서를 참조해서 바꿨는데, 제 local에선 에러가 안뜨는데, 바꿀때마다 배포에 실패했습니다. 그러다가 params와 searchParams를 전부 Promise 타입으로 감싸고 await로 안전하게 접근하도록 수정했습니다.

import HomeButton from "../components/HomeButton";
import { getForecast } from "../utils/getForecast";

// 수정된 Props 타입
type Props = {
  params: Promise<{ location: string }>; // params를 Promise로 정의
  searchParams: Promise<{ name?: string }>; // searchParams도 Promise로 정의
};

export async function generateMetadata({ searchParams }: Props) {
  const resolvedSearchParams = await searchParams; // 비동기로 처리
  const name = resolvedSearchParams?.name || "Unknown";

  return {
    title: `날씨 앱 - ${name}`,
    description: `${name} 날씨를 알려드립니다`,
  };
}

export default async function Detail({ params, searchParams }: Props) {
  // params와 searchParams를 비동기로 처리
  const resolvedParams = await params;
  const resolvedSearchParams = await searchParams;

  const name = resolvedSearchParams?.name || "Unknown";
  const location = resolvedParams?.location;

  // location이 없는 경우 에러 처리
  if (!location) {
    throw new Error("Location is required!");
  }

  // API 호출
  const res = await getForecast(location);
  return (
    <>
      <h1>{name}의 3일 예보</h1>
      <ul>
        {res.forecast.forecastday.map((day) => (
          <li key={day.date}>
            {day.date} / {day.day.avgtemp_c}
          </li>
        ))}
      </ul>
      <HomeButton />
    </>
  );
}

바뀐 코드는 위와 같습니다! 한 2~3시간 꼼짝없이 매달렸네요.. 제 실력이 너무 부족했던 것 같습니다..! 다른 분들은, 저처럼 실수없이 잘 해결하시길!
일단 배포는 완료했습니다!


0

hajoeun

감사합니다! 다른 분들에게도 도움이 될 것 같아요. 고생 많으셨어요!

안녕하세요 generateStaticParams 관해서 질문

0

366

2

next/image에 대한 질문

1

266

1

데이터 재검증 방법

1

277

2

next.js 에서 서버 컴포넌트 비중을 늘리는 이유

1

346

1

route.ts에 async 키워드가 필요한가요?

1

191

1

import 절대경로 설정 방법 질문 드립니다!

0

306

1

VSCode 확장프로그램은 어떤 것을 사용하셨나요?

0

338

1

환경변수 오류

1

243

1

하이드레이션 질문 드립니다

2

318

2

프론트엔드가 Next를 이용하여 API 만드는 이유가 궁금합니다~!

3

735

1

generateStaticParams에 대하여 질문 드립니다~!

2

867

1

선생님 혹시 Next.js 13에서의 React-query는 어떻게 생각하실까요?

2

1947

3

클라이언트 컴포넌트는 SSG? SSR?

2

859

2

SSR과 RSC의 차이점에 관하여 질문이 있습니다.

1

1290

1

nextjs의 14버전에서 data fetch

1

1422

1

비동기 호출, fetch, 라우트 핸들러 관련 질문입니다.

1

427

1

revalidate 질문

1

479

1

섹션3. 날씨 재검증하기 NextRequest 질문입니다.

1

338

1

메타데이터 관련 질문

0

215

1

비동기 호출 관련 질문있습니다!

2

327

1

Revalidate 부분 질문

0

345

1

서버 컴포넌트 관련 질문입니다!

3

1692

5

Data Fetching 관련 질문 있습니다~

2

522

1

useRouter 를 import 할때 next/router만 뜨는 경우

0

612

2