如何在中间件中获取域,然后在 axios 调用 [Nuxt] 之前将其传递给 components/store
How to get domain in middleware, then pass it to components/store before axios calls [Nuxt]
我想在进行任何 axios
调用之前访问域名。因为 axios
调用需要域 URL 才能进行。
所以,我想先获取域,然后将其传递给 store/components,以便它们可以正确加载。
我的理解是域保存在传递给中间件的上下文的 req
对象中。
我如何获取它然后将其传递给商店和组件?
你可以这样做。使用 nuxtServerInit
。此函数在服务器端调用,并且仅在您重新加载页面时调用一次。为此,您需要前往您的商店并添加:
//商店
actions: {
nuxtServerInit(store, context){
store.commit("setUrl", context.req.originalUrl);
}
}
好吧,就是这样。人们也喜欢解构论点:
actions: {
nuxtServerInit({ commit},{req}){
commit("setUrl", req.originalUrl);
}
}
我不确定它是 originalUrl
还是只是 url
... 或者可能有些不同。
要扩展 lfaruki 的答案,您可以这样做。这是我的解决方案:
store/index.js
export const state = () => ({
domain: '',
});
export const mutations = {
setDomain(state, domain) {
state.domain = domain;
},
};
export const actions = {
nuxtServerInit(store, context) {
store.commit('setDomain', context.req.headers.host);
},
};
export const getters = {
domain: (state) => state.domain,
};
middleware/domain.js
export default function ({ route, store, redirect }) {
console.log('hey look at that', store.getters['domain']);
}
nuxt.config.js
export default {
...
router: {
middleware: 'domain'
},
}
我想在进行任何 axios
调用之前访问域名。因为 axios
调用需要域 URL 才能进行。
所以,我想先获取域,然后将其传递给 store/components,以便它们可以正确加载。
我的理解是域保存在传递给中间件的上下文的 req
对象中。
我如何获取它然后将其传递给商店和组件?
你可以这样做。使用 nuxtServerInit
。此函数在服务器端调用,并且仅在您重新加载页面时调用一次。为此,您需要前往您的商店并添加:
//商店
actions: {
nuxtServerInit(store, context){
store.commit("setUrl", context.req.originalUrl);
}
}
好吧,就是这样。人们也喜欢解构论点:
actions: {
nuxtServerInit({ commit},{req}){
commit("setUrl", req.originalUrl);
}
}
我不确定它是 originalUrl
还是只是 url
... 或者可能有些不同。
要扩展 lfaruki 的答案,您可以这样做。这是我的解决方案:
store/index.js
export const state = () => ({
domain: '',
});
export const mutations = {
setDomain(state, domain) {
state.domain = domain;
},
};
export const actions = {
nuxtServerInit(store, context) {
store.commit('setDomain', context.req.headers.host);
},
};
export const getters = {
domain: (state) => state.domain,
};
middleware/domain.js
export default function ({ route, store, redirect }) {
console.log('hey look at that', store.getters['domain']);
}
nuxt.config.js
export default {
...
router: {
middleware: 'domain'
},
}