0Pricing
Vue Academy · レッスン

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/posts

defineEventHandler

すべてのサーバールートは、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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Nuxt 3のプロジェクト構成とファイルベースルーティング
  2. データ取得:useFetchとuseAsyncData
  3. NuxtのサーバールートとAPIエンドポイント
  4. SSRとSSGとSPAモード
← Vue Academyに戻る