Next.js에서 API를 만들려면 app/api/.../route.js
안에 함수들을 선언해야 한다.
페이지 컴포넌트가 아닌, 서버 전용 API 함수 파일로 작동한다.
클라이언트에서 호출하는 HTTP 요청(GET, POST, PATCH, PUT, DELETE..)에 응답하는 서버 전용 함수 파일
단, 페이지 컴포넌트와 다르게 화면을 렌더링하지 않는다.
export function GET(request){
console.log(request);
// return Response.json();
return new Response('Hello');
}
GET
, POST
, PUT
, DELETE
등 HTTP 메서드 이름으로 export해야 한다.route.js
여야 Next.js가 라우트 핸들러로 인식request
객체를 인자로 넘겨줌route.js
로 두기route.js
가 아니면 Next.js가 라우트 핸들러로 인식하지 못함!GET
, POST
등 메서드 함수가 없으면 → 405 Method Not Allowed라우트 핸들러는 API를 위한 서버 전용 파일이기 때문에
<div>Hello</div>
같은 JSX를 리턴하면 안 되고,
반드시 new Response()
또는 Response.json()
형식으로 반환해야 함!
aysnc
함수로 request body 파싱 가능라우트 핸드러는 서버 함수이기 때문에 async/await
사용이 가능하다.
예를 들어, POST 요청에서 request.json()
을 처리하려면 await
이 필요하다.
export async function POST(request) {
const body = await request.json();
return Response.json({ name: body.name });
}
await
없이.json()
을 호출하면 데이터가 아니라Promise
가 응답에 포함될 수 있다.