如何消除 Nuxt/SSR 中的 CORS 错误?
How to get rid of CORS error in Nuxt/SSR?
因此,我使用 Nuxt/SSR 提出了一个简单的 api 请求。我有城市和类别。每个城市都有一个类别列表。要获取城市,我必须使用 https:///api/cities 并获取类别,我应该使用 https:///api/cities?id
store/cities.js
export const state = () => ({
cities: [],
})
export const mutations = {
setCities(state, cities) {
state.cities = cities
},
}
export const actions = {
async fetch({ commit }) {
const cities = await this.$axios.$get(
'https://api/cities'
)
commit('setCities', cities)
},
}
export const getters = {
cities: (s) => s.cities,
}
它与这个index.vue完美配合:
export default Vue.extend({
async fetch({ store }) {
if (store.getters['cities/cities'].length === 0) {
await store.dispatch('cities/fetch')
}
},
computed: {
cities() {
return this.$store.getters['cities/cities']
}
}
})
但现在我想在点击时获取类别(选择城市 ID):
store/categories.js
export const state = () => ({
categories: [],
})
export const mutations = {
setCategories(state, categories) {
state.categories = categories
},
}
export const actions = {
async fetch({ commit }, cityId) {
const categories = await this.$axios.$get(
'https://api/cities?id=' + <data that I get on click>
)
commit('setCategories', categories)
},
}
export const getters = {
categories: (s) => s.categories,
}
现在index.vue:
export default Vue.extend({
computed: {
cityCategories() {
return []
},
},
methods: {
// this function I call on click
selectCity(selectedCityId) {
this.$store.dispatch('categories/fetch', selectedCityId)
}
}
})
但在这之后我在点击时出现错误:
Cross-Origin 请求被阻止:同源策略不允许读取位于 https://api/cities?id 的远程资源。 (原因:缺少 CORS header ‘Access-Control-Allow-Origin’)。状态码:200.
Cross-Origin 请求被阻止:同源策略不允许读取位于 https://api/cities?id 的远程资源。 (原因:CORS请求没有成功)。状态码:(null).
我确定问题不在 api,因为我尝试使用第一种方法获取类别而不点击(只是将 id 编辑为 1)并且有效。我有相同的本地域,所以它与 api 中的 headers 无关。
CORS 肯定在 API。
设置 Access-Control-Allow-Origin
header 来自 back-end 的响应。
它在点击时不起作用,因为它是来自 browser/localhost 的请求,而不是来自 nuxt 服务器的请求。所以我只是安装了nuxtjs代理首先在本地服务器上发送请求。
因此,我使用 Nuxt/SSR 提出了一个简单的 api 请求。我有城市和类别。每个城市都有一个类别列表。要获取城市,我必须使用 https:///api/cities 并获取类别,我应该使用 https:///api/cities?id
store/cities.js
export const state = () => ({
cities: [],
})
export const mutations = {
setCities(state, cities) {
state.cities = cities
},
}
export const actions = {
async fetch({ commit }) {
const cities = await this.$axios.$get(
'https://api/cities'
)
commit('setCities', cities)
},
}
export const getters = {
cities: (s) => s.cities,
}
它与这个index.vue完美配合:
export default Vue.extend({
async fetch({ store }) {
if (store.getters['cities/cities'].length === 0) {
await store.dispatch('cities/fetch')
}
},
computed: {
cities() {
return this.$store.getters['cities/cities']
}
}
})
但现在我想在点击时获取类别(选择城市 ID):
store/categories.js
export const state = () => ({
categories: [],
})
export const mutations = {
setCategories(state, categories) {
state.categories = categories
},
}
export const actions = {
async fetch({ commit }, cityId) {
const categories = await this.$axios.$get(
'https://api/cities?id=' + <data that I get on click>
)
commit('setCategories', categories)
},
}
export const getters = {
categories: (s) => s.categories,
}
现在index.vue:
export default Vue.extend({
computed: {
cityCategories() {
return []
},
},
methods: {
// this function I call on click
selectCity(selectedCityId) {
this.$store.dispatch('categories/fetch', selectedCityId)
}
}
})
但在这之后我在点击时出现错误:
Cross-Origin 请求被阻止:同源策略不允许读取位于 https://api/cities?id 的远程资源。 (原因:缺少 CORS header ‘Access-Control-Allow-Origin’)。状态码:200.
Cross-Origin 请求被阻止:同源策略不允许读取位于 https://api/cities?id 的远程资源。 (原因:CORS请求没有成功)。状态码:(null).
我确定问题不在 api,因为我尝试使用第一种方法获取类别而不点击(只是将 id 编辑为 1)并且有效。我有相同的本地域,所以它与 api 中的 headers 无关。
CORS 肯定在 API。
设置 Access-Control-Allow-Origin
header 来自 back-end 的响应。
它在点击时不起作用,因为它是来自 browser/localhost 的请求,而不是来自 nuxt 服务器的请求。所以我只是安装了nuxtjs代理首先在本地服务器上发送请求。