みなさんこんにちは。どんぶラッコです。
今回はAxios Mock をご紹介したいと思います!
「擬似的に$axiosモジュールでAPI連携をしたい…でも外部にサーバ立てるのは面倒臭いなあ…」
なんて時に便利ですよ♪
Axios Mock を使う
下記のQiitaがとても参考になります(というか作者様。。)
RESTfulな「axios-mock-server」の使い方
https://github.com/m-mitsuhide/axios-mock-server
yarn add axios
yarn add axios-mock-server --dev
mocks
というディレクトリを作る
mkdir mocks
そして、試しに mocks/users/_userId.js
なんてファイルを作ってみます。
const users = [{ id: 0, name: 'foo' }]
export default {
get ({ values }) {
return [200, users.find(user => user.id === values.userId)]
}
}
そして、ビルド。
$ node_modules/.bin/axios-mock-server --build
mocks/$mock.js was built successfully.
ちなみに、--watch
プロパティも使えます!
node_modules/.bin/axios-mock-server --build --watch
Nuxt.jsのプラグインとして$mock.js
を読み込ませるようにするため、下記の設定を行います。
まず、plugins/mock.js
を作成し、下記を記述
import mock from '~/mocks/$mock'
export default ({ $axios }) => {
mock($axios)
}
その後、nuxt.config.js
に下記を追記します。
export default {
plugins: ['@/plugins/mock']
}
これで完成!あとは各コンポーネントでこのように呼び出せるようになります。
async asyncData ({ $axios, params }) {
const id = params.id
const data = await $axios.$get(`/users/${id}`)
return { data }
}
// this.data で呼び出せるようになる
// TypeScriptの場合...
import { Context } from '@nuxt/types'
import Vue from 'vue'
export default Vue.extend({
async asyncData ({ app, $axios }:Context): Promise<any> {
const res = await $axios.get('/users/0')
return { menus: res.data }
}
})
簡単なAPI連携をテストする時なんかに便利ですね!
ぜひ使ってみてください♪