1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Nextjs14のServerActionsの返り値がundefinedになる。

Posted at

現象

nextjs14のserver actionsを利用して、データをやり取りする際に、サーバーからの返り値がundefinedとなってしまう。

原因

middlewareの中でrequestを書き換えていたためにリクエストヘッダーの形式が変化していた。当たり前といえば当たり前ですが、server actionsを呼ぶ際にもmiddlewareを通過しますので、注意が必要です。

解決策

middlewareにおいて、POSTメソッドが呼ばれる際にはそのままのリクエスト情報を流すようにしました。
server actionsは、POST methodで扱われるようです。

middleware.ts

export async function middleware(request: NextRequest) {
    const response = NextResponse.next();
    console.log('middleware.ts called', request.method);

    // server component用のpathnameセット
    const headers = new Headers(request.headers);
    headers.set('pathname', request.nextUrl.pathname);

    // 認証情報CK
    const authenticated = true;

    // 認証されている場合
    if (authenticated) {
        if (request.method === 'POST') return NextResponse.next();
        else if (request.method === 'GET') return NextResponse.next({ headers });
    }

    // 認証されていない場合リダイレクト
    return NextResponse.redirect(new URL('/login', request.url));
}

まとめ

server actionsは、とても便利な機能ですが、内部でどのように処理されているのかが不透明なので、トラブル時の解析がしづらかったです。
servera actionsではまった人は一度middlewareが悪さしていないか確認してみてください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?