Witajcie,
nie mam sporego doświadczenia w VUEJS jak i w samym JS, stąd prawdopodobnie ugrzązłem na wydawałoby się dość trywialnym temacie.
Słowem wyjaśnienia projekt to aplikacja SPA mająca się komunikować z backendem via REST API a postawiona jest na VITESSE (boilerplate VUE3+Typescript+Pinia+composition API ....)
Postanowiłem jako, że aplikacja z założenia będzie dość złożona wydzelić warstwę komunikującą się po HTTP.
W związku z powyższym stworzyłem folder /src/api a w nim kolejne pliki z podzielonymi na grupy metodami wykonującymi konkretne zapytania via axios (jak niżej)
import type { AxiosInstance, AxiosRequestConfig } from 'axios'
import axios from 'axios'
import { router } from '~/main'
const axiosInstance: AxiosInstance = axios.create({
baseUrl: import.meta.env.API_URL,
headers: {
'Content-type': 'application/json',
'Authorization': 'Bearer ' + 'TOKENXXXXXXXXXXXXX',
'Language': router.currentRoute.value.params.lang,
},
})
async function axiosCall<T>(config: AxiosRequestConfig) {
try {
const { data } = await axiosInstance.request<T>(config)
return [null, data]
}
catch (error) {
return [error]
}
}
export async function sendMessage(formData) {
return axiosCall<void>({ method: 'post', url: '/send-message', data: formData })
}
OPIS PROBLEMU
W headerach chciałbym umieszczać aktualnie wybrany język przez usera do backendu:
'Language': router.currentRoute.value.params.lang,
problem tylko w tym że router jest w tym momencie "niezainicjowany".
Mimo że jestem na ścieżce /en/contact
to router.fullPath
pokazuje "/"
, a router.currentRoute.value.params
jest pustym obiektem
jednak jak wykonam coś takiego w powyższym pliku:
async function getLang() {
await router.isReady()
console.log('routerLang:', router.currentRoute.value.params.lang)
}
getLang()
to oczywiście na konsoli bez zająknięcia pojawia się "routerLang: en"
Oczywiście obejściem jest wyekstrahowanie języka z dostępnego w tym etapie: window.location.href
jednak to z pewnością niezgodne ze sztuką
Jak z takimi problemami sobie radzić ?
Pozdrawiam i z góry dziekuję