banzyyy
@banzyyy

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

nuxtでaxiosの処理をstoreに移設したらCORSでネットワークエラーになる

自己解決しました。
{withCredentials: true}をaxiosのとこに追加したら動きました。

getjson.jsがindex.jsになっているのは、nuxtServerInitを使うためなので関係ないはず。

参考
https://qiita.com/att55/items/2154a8aad8bf1409db2b

解決後

store>index.js
import axios from 'axios'

export const state = () => ({
  items: []
})

export const mutations = {
  setItems (state, items) {
    state.items = items
  }
}

export const actions = {
  async nuxtServerInit({ commit }) {
    const { data } = await axios.get('https://script.google.com/macros/s/id', {withCredentials: true})
    commit('setItems', data)
  }
}

export const getters = {
  getItems: (state) => state.items
}

もともとの質問

nuxtで作成中のウェブアプリケーションで、pages配下の各vueファイル内でaxiosを使ってAPIと通信していた処理を、storeにまとめてvuexのactionで実行するように修正したところ、CORSで弾かれてネットワークエラーとなりました。

npm run build && npm run exportで吐き出した静的ファイルを、FTPでオンプレのサーバーにデプロイしています。

vueファイル内だとデータを取得できるのに、vuexだとネットワークエラーになるのは、何が原因なのでしょうか…

before

pages.vue
<script>
import axios from "axios"

export default {
  async asyncData({ $axios }) {
    //スプレッドシートからページタイトルとURLのjsonデータを取得
    const url = 'https://script.google.com/macros/s/id';
    const response = await $axios.$get(url);
    return { result: response }
  }
}
</script>

after

pages.vue
<script>
import { mapGetters, mapActions } from 'vuex'

export default {
  created() {
    this.$store.dispatch("getjson/fetchItems");
  },
  computed: {
    ...mapGetters({
      jsonData: 'getjson/getItems'
    })
  }
};
</script>
store>getjson.js
import axios from 'axios'

export const state = () => ({
  items: []
})

export const mutations = {
  setItems (state, items) {
    state.items = items
  }
}

export const actions = {
  async fetchItems({ commit }) {
    const { data } = await axios.get('https://script.google.com/macros/s/id')
    commit('setItems', data)
  }
}

export const getters = {
  getItems: (state) => state.items
}
0

1Answer

Your answer might help someone💌