1. Next.js 13(App Router) API Routes Test
405(Method Not Allowed), 500(Internal Server Error) ํด๊ฒฐ
๐๐ป Next.js API Routes ๊ณต์๋ฌธ์
๊ณต์๋ฌธ์์์๋ ๊ฒฝ๋ก๊ฐ pages/api
๋ก ๋์ด ์๋๋ฐ Next.js 13์์๋ pages ํด๋๋ฅผ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ๊ฒฝ๋ก๋ ์๋์ ๊ฐ์ด ๋ณ๊ฒฝํ๋ค.
src/app/api/testApi/route.ts
apiํด๋ ์์ api์ด๋ฆ์ผ๋ก ๋ ํด๋ ๋ฐ ํ์ route.ts
ํ์ผ์ ๋ง๋ค์ง ์๊ณ ๋ฐ๋ก testTwo.ts
์ ๊ฐ์ ํ์ผ์ ๋ง๋ค ๊ฒฝ์ฐ 404 error ๋ฐ์
const response = await fetch('/api/testApi');
src/app/page.tsx
handleApiTest
ํจ์๋ฅผ ์ฐ๊ฒฐํ๋ค.405 Error๋ ํด๋ผ์ด์ธํธ๊ฐ ํน์ URL์ ๋ํด ํ์ฉ๋์ง ์๋ HTTP ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ ๋, ์๋ฒ ์ธก์์ ํด๋น ์์ฒญ ๋ฐฉ๋ฒ์ ํ์ฉํ์ง ์๋ ๊ฒฝ์ฐ์ ๋ฐ์ํ๋ค.
405 Error๊ฐ ๋ฐ์ํ๋ ์ด์
ํด๊ฒฐ ๊ณผ์
GET
์ผ๋ก ๋ณ๊ฒฝexport dafult ํจ์
๊ฐ ์๋๋ผ export ํจ์
๋ฅผ ์ฌ์ฉํ๋ค => default๋ฅผ ์ง์ฐ๊ณ export async function GET
์ผ๋ก ๋ณ๊ฒฝ์ฝ๋ ์์ ๊ฒฐ๊ณผ
405 Error๊ฐ ๋ฐ์ํ๋ code
405 Error๊ฐ ๋ฐ์ํ์ง ์๋ code
์๋ฒ ์ธก์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ฌ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ ์ํ์์ ๋ํ๋ด๋ HTTP ์ํ ์ฝ๋๋ก ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋์ ์๋ฒ์์ ์์์น ๋ชปํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์์ ๋ํ๋ธ๋ค.
500 Error๊ฐ ๋ฐ์ํ๋ ์ด์
App Router
๋ฅผ ์ฌ์ฉ์ค์ธ๋ฐ ๊ณต์๋ฌธ์๋ Pages Router
์ ๋ํ ๋ถ๋ถ์ ์ฐธ๊ณ ํ๊ธฐ ๋๋ฌธ์ ๊ณ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒApp Router
๊ณต์๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ฝ๋๋ฅผ ์์ ํ๋ค. Api code
// src/app/api/testApi/route.ts
import { NextResponse } from "next/server";
export async function GET(request: Request) {
return NextResponse.json({ message: 'Hello from Next.js!' })
}
Client code
// src/app/page.tsx
// api test
const handleApiTest = async () => {
try {
const response = await fetch('/api/testApi');
if (response.ok) {
const data = await response.json();
console.log('Response status:', response.status);
console.log('Response message:', data.message);
} else {
console.log('API ์์ฒญ ์คํจ');
}
} catch (error) {
console.error('API ์์ฒญ ์ค๋ฅ:', error);
}
};
...
{/* api Test button */}
<Button onClick={handleApiTest}>Api test</Button>