ペペロミアのWeb版でのAPIアクセスの実装に@nuxt/httpを導入しみました。
Nuxtは元々axiosを押していましたが、今後こちらの@nuxt/http標準になる流れみたいなので採用しました。
Pull Request
https://github.com/wheatandcat/PeperomiaWeb/pull/29
実装方法
まず、インストール
$ yarn add @nuxt/http
nuxt.config.jsに以下を追加
■ nuxt.config.js
plugins: [ '~/plugins/http', ← 追加 '@/plugins/composition-api', '~/plugins/cookie-storage.js', ], modules: [ '@nuxt/http', ← 追加 '@nuxtjs/firebase' ],
Typeの設定のtsconfig.jsonに追加
■ tsconfig.json
"types": [ "@types/node", "@nuxt/types", "@nuxtjs/firebase", "@nuxt/http", ← 追加 "vuetify" ] },
plugins/http.tsを作成して追加 ここで各Requestのハンドリングを行えます。
■ plugins/http.ts
import { Plugin } from '@nuxt/types' import { NuxtHTTPInstance } from '@nuxt/http' type Props = { $http: NuxtHTTPInstance } const httpPlugin: Plugin = ({ $http }: Props) => { $http.onRequest((config) => { console.log('Making request to ' + config.url) }) $http.onError((error) => { alert('リクエストに失敗しました。メッセージ: ' + error.message) }) } export default httpPlugin
最後にpost用のメソッド作成
■ modules/fetch.ts
import { SetupContext } from '@vue/composition-api' import { getAccessToken } from './auth' const BASE_URL = process.env.API_HOST export const post = async (context: SetupContext, path: string, param: any) => { const token = await getAccessToken(context) context.root.$http.setHeader('Content-Type', 'application/json') context.root.$http.setHeader('Authorization', `Bearer ${token}`) const res = await context.root.$http.post(`${BASE_URL}/${path}`, param) return res }
後は実際に上記のpostメソッドを使用してhttp Requestを実装
■ components/organisms/schedule/dialog.vue
const onSave = async (itemDetail: ItemDetail) => { state.apiLoading = true const res = await post(context, 'UpdateItemDetail', { itemDetail, }) if (res.ok) { await setItemData() state.mode = 'show' } state.apiLoading = false }
こんな感じの動きになりました。
@nuxt/httpは初めて使ってみたけどシンプルで結構良さ気な気がする