NuxtのサーバールートとAPIエンドポイント
server/api/ディレクトリ、defineEventHandler()、H3ユーティリティ、ミドルウェア、エラー処理
「NuxtのサーバールートとAPIエンドポイント」はCoddyKit上の無料Vue Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはVue Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Vue Academyコースには全4レッスンが含まれています。
Nuxtはフルスタック
Nuxt 3にはサーバーエンジン(Nitro)が含まれています。server/ディレクトリを使うと、ページと同じ場所にAPIエンドポイントを構築できます。多くのアプリでは、別のバックエンドは必要ありません。
server/apiディレクトリ
server/api/内のファイルは、/api配下のAPIルートになります。server/api/hello.tsは/api/helloで応答します。
server/
api/
hello.ts -> /api/hello
posts.ts -> /api/postsdefineEventHandler
すべてのサーバールートは、defineEventHandlerで作成したハンドラーをエクスポートします。返した値がレスポンスとして送信され、JSONには自動的にシリアライズされます。
// server/api/hello.ts
export default defineEventHandler((event) => {
return { message: 'Hello from the server' }
})HTTPメソッドのサフィックス
ファイル名にメソッドのサフィックスを追加すると、処理するメソッドを限定できます。users.get.tsはGETを、users.post.tsはPOSTを処理します。サフィックスがない場合、そのルートはすべてのメソッドに応答します。
server/api/
users.get.ts -> GET /api/users
users.post.ts -> POST /api/usersクエリパラメータの読み取り
getQueryヘルパーを使うと、イベントからURLのクエリ文字列を読み取れます。
export default defineEventHandler((event) => {
const query = getQuery(event)
return { search: query.q }
})リクエストボディの読み取り
POST/PUTリクエストでは、readBodyが受信したJSONボディをパースします。非同期処理なので、awaitしてください。
export default defineEventHandler(async (event) => {
const body = await readBody(event)
return { received: body }
})動的なサーバールート
サーバーでも角括弧のファイル名を使用できます。server/api/users/[id].get.tsでは、getRouterParamを使ってidを読み取ります。
export default defineEventHandler((event) => {
const id = getRouterParam(event, 'id')
return { id }
})HTTPエラーのスロー
createErrorを使うと、単純なエラーをスローする代わりに、ステータスコードとメッセージを含む適切なHTTPエラーレスポンスを返せます。
export default defineEventHandler((event) => {
const id = getRouterParam(event, 'id')
if (!id) {
throw createError({ statusCode: 400, statusMessage: 'Missing id' })
}
})H3イベントオブジェクト
event引数は、NitroのHTTPフレームワークであるH3から渡されます。リクエストとレスポンスを保持し、すべてのヘルパー関数のエントリポイントになります。
ステータスとヘッダーの設定
setResponseStatusやsetHeaderなどのヘルパーを使うと、値を返すだけでは不十分な場合にレスポンスを制御できます。
export default defineEventHandler((event) => {
setResponseStatus(event, 201)
setHeader(event, 'Cache-Control', 'no-cache')
return { created: true }
})ページからAPIを呼び出す
ページからは、useFetchまたは$fetchで独自のエンドポイントをフェッチします。SSR中はNuxtがハンドラーを直接呼び出すため、HTTPラウンドトリップを省略できます。
const { data } = await useFetch('/api/posts')理解度チェック
Nuxtのサーバールートに関する理解度を確認します。
まとめ
Nuxtのサーバールートについて学びました。
- server/api/内のファイルはAPIエンドポイントになります。
- defineEventHandlerでハンドラーを定義し、その戻り値がレスポンスになります。
- .get.ts/.post.tsサフィックスでHTTPメソッドを限定できます。
- H3イベントでgetQuery、readBody、getRouterParam、createErrorを使用します。
よくある質問
「NuxtのサーバールートとAPIエンドポイント」レッスンは無料ですか?
はい。「NuxtのサーバールートとAPIエンドポイント」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Vue Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Vue Academyコースには全4レッスンが含まれています。
「NuxtのサーバールートとAPIエンドポイント」で何を学びますか?
server/api/ディレクトリ、defineEventHandler()、H3ユーティリティ、ミドルウェア、エラー処理 ブラウザで直接実行するハンズオンコードでVue Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Vue Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのVue Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「NuxtのサーバールートとAPIエンドポイント」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このVue Academyレッスンでコードを書いて実行できますか?
はい。すべてのVue Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Nuxt 3のプロジェクト構成とファイルベースルーティング
- データ取得:useFetchとuseAsyncData
- NuxtのサーバールートとAPIエンドポイント
- SSRとSSGとSPAモード