Reputation: 1952
I'm trying to define an "Accept-Language" header for my SPA in vue.js (with nuxt).
Here's what I tried but it doesn't work. I specify that I use the axios module for nuxt.
I created a plugin as explained in the documentation. I included the plugin in nuxt.config.js.
I tried to use setHeader
as explained here, but it doesn't work.
export default function ({ store, $axios, redirect }) {
$axios.setBaseURL(process.env.BASE_URL);
if (process.server) {
return
}
$axios.onRequest(config => {
const baseUrl = $axios.defaults.baseURL;
const locale = store.getters['lang/locale'];
if (locale) {
$axios.setHeader('Accept-Language', locale)
}
});
}
But this code doesn't work. However, when I make console.log
, I see them so it is taken into account.
Upvotes: 3
Views: 4690
Reputation: 509
Use $axios.interceptors instead of $axios.onRequest
export default function({store, $axios, redirect}) {
$axios.setBaseURL(process.env.BASE_URL);
if (process.server) {
return
}
$axios.interceptors.request.use((config) => {
const baseUrl = $axios.defaults.baseURL;
const locale = store.getters['lang/locale'];
if (locale) {
$axios.setHeader('Accept-Language', locale)
}
return config;
});
}
Upvotes: 3
Reputation: 56
how are you making the request? If you want to use the helpers (setHeader, setToken, ...) provided by @nuxtjs/axios, you then must always use the request helpers provided by it, that are simply the lowercase http method names prefixed with a $
Instead of $axios.get( ... )
use $axios.$get( ... )
and so on for put, post, delete...
You can also try setting headers this way:
$axios.onRequest(config => {
const baseUrl = $axios.defaults.baseURL;
const locale = store.getters['lang/locale'];
if (locale) {
config.headers.common['Accept-Language'] = locale;
}
});
Upvotes: 1