내일배움캠프

230901 nextjs 서버컴포넌트에서 form 사용하기

Neda 2023. 9. 1. 20:20

230901 nextjs 서버컴포넌트에서 form 사용하기

서버 컴포넌트에서는 useState와 같은 hooks을 사용할 수 없다.따라서 form의 기본 사용법에 따라 action과 method로 http 요청을 보내고 api 폴더에 만들어 둔 route.ts에서 적절한 처리하여 응답을 받는다.

// app/api/auth/login/route.ts

export async function POST(request: Request) {
	const requestUrl = new URL(request.url)
    const formData = await request.formData()
    const email = String(formData.get('email'))
    const password = String(formData.get('password'))
    
    //로그인 처리
    
    //에러 발생시 리디렉션
    if(error) return NextResponse.redirect(
      `${requestUrl.origin}/login?error=계정을 찾을 수 없습니다`,
      { status: 301 }
    )
    
    // 성공 시 홈으로 리디렉션
    return NextResponse.redirect(requestUrl.origin, {
      status: 301,
    })
}

 

app/login/page.tsx
...
<form action='/api/auth/login' method='post'>
    <label htmlFor="email">Email</label>
    <input name="email" required />
    <label htmlFor="password">Password</label>
    <input type="password" name="password" required />
</form>
...