実現したいこと
Nuxt3のuseAsyncDataメソッドのhandler引数にaxiosのラッパーメソッドを渡して、サーバーサイドでもapiと通信したい。
ソースコード
pages/index.vue
1<script setup lang="ts"> 2import request from '@/utils/request' 3 4const {data} = await useAsyncData<T>(async () => { 5 const data = await request.get<T>('/api/example') 6 return data 7}) 8</script> 9 10<template> 11// クライアントサイド apiと通信できている 12// バックエンド apiと通信できずdata.value === nullになる 13{{ data }} 14</template>
utils/request.ts
1export default () => { 2 async get<T> (path: string) { 3 // 簡略化のため省略 4 const res = await axios.get(baseURL + path) 5 return res.data 6 } 7}
問題
クライアントサイドでバックエンドと通信を行う場合は、dataを取得できていますが、サーバーサイドでバックエンドと通信を行う場合にdataを取得できません。
また、useAsyncDataのhandler引数にaxiosのラッパーメソッドではなくaxios関数をそのまま渡した場合はクライアントサイド・サーバーサイドの両方で通信が成功します。
axios関数をそのまま渡した場合
1<script setup lang="ts"> 2const {data} = await useAsyncData<T>(async () => { 3 const res = await axios.get<T>('http://localhost:8080/api/example') 4 return res.data 5}) 6</script>
なぜaxiosのラッパーメソッドをハンドラー引数として使用した場合に、サーバーサイドの通信が失敗するのかを教えていただきたいです。

あなたの回答
tips
プレビュー