Для работы с HTTP-запросами в приложениях на Quasar обычно используют библиотеку Axios. Она обеспечивает удобный интерфейс для выполнения запросов к REST API и обработки ответов.
Установка производится стандартно через npm или yarn:
npm install axios
# или
yarn add axios
После установки Axios необходимо интегрировать его в проект Quasar.
Наиболее удобный способ — создать плагин, который позволит использовать
Axios во всех компонентах через $axios.
В Quasar плагины создаются в папке src/plugins. Создадим
файл axios.js:
import { boot } fr om 'quasar/wrappers'
import axios from 'axios'
const api = axios.create({
baseURL: 'https://api.example.com', // базовый URL для всех запросов
timeout: 10000, // таймаут в миллисекундах
headers: {
'Content-Type': 'application/json'
}
})
export default boot(({ app }) => {
app.config.globalProperties.$axios = axios // доступ к оригинальному axios
app.config.globalProperties.$api = api // доступ к настроенному экземпляру
})
export { api }
Далее нужно зарегистрировать плагин в файле
quasar.conf.js:
boot: [
'axios'
]
Теперь $axios и $api доступны во всех
компонентах и сторе Vuex.
Пример GET-запроса с использованием настроенного экземпляра:
export default {
name: 'UserList',
data() {
return {
users: [],
loading: false,
error: null
}
},
async mounted() {
this.loading = true
try {
const response = await this.$api.get('/users')
this.users = response.data
} catch (err) {
this.error = err.response?.data?.message || err.message
} finally {
this.loading = false
}
}
}
POST-запрос с передачей данных:
async addUser(user) {
try {
const response = await this.$api.post('/users', user)
this.users.push(response.data)
} catch (err) {
console.error('Ошибка при добавлении пользователя:', err)
}
}
Для централизованной обработки запросов и ответов используются интерцепторы. Они позволяют, например, автоматически добавлять токен авторизации или обрабатывать ошибки.
api.interceptors.request.use(config => {
const token = localStorage.getItem('auth_token')
if (token) {
config.headers.Authorization = `Bearer ${token}`
}
return config
}, error => Promise.reject(error))
api.interceptors.response.use(response => {
return response
}, error => {
if (error.response?.status === 401) {
// логика выхода или обновления токена
console.warn('Неавторизованный доступ')
}
return Promise.reject(error)
})
Для работы с состоянием часто создают отдельный модуль Vuex, в
котором выполняются запросы через $api.
Пример модуля store/modules/users.js:
export default {
namespaced: true,
state: () => ({
users: [],
loading: false,
error: null
}),
mutations: {
setUsers(state, users) { state.users = users },
setLoading(state, loading) { state.loading = loading },
setError(state, error) { state.error = error }
},
actions: {
async fetchUsers({ commit }) {
commit('setLoading', true)
try {
const { data } = await this._vm.$api.get('/users')
commit('setUsers', data)
} catch (err) {
commit('setError', err.response?.data?.message || err.message)
} finally {
commit('setLoading', false)
}
}
}
}
Axios позволяет легко передавать параметры и настраивать заголовки для отдельных запросов:
const response = await this.$api.get('/search', {
params: { query: 'quasar', lim it: 10 },
headers: { 'X-Custom-Header': 'CustomValue' }
})
Для POST/PUT-запросов:
await this.$api.post('/users', {
name: 'John Doe',
email: 'john@example.com'
}, {
headers: { 'X-Request-ID': '12345' }
})
Axios предоставляет объект error, содержащий полезные
данные:
error.response — ответ сервера (код, данные)error.request — объект запроса, если ответа нетerror.message — сообщение ошибкиПример обработки в компоненте:
try {
await this.$api.get('/data')
} catch (error) {
if (error.response) {
console.error('Ошибка сервера:', error.response.status)
} else if (error.request) {
console.error('Нет ответа от сервера')
} else {
console.error('Ошибка запроса:', error.message)
}
}
Интеграция Axios через плагин Quasar обеспечивает:
Такая архитектура делает взаимодействие с API масштабируемым и поддерживаемым в больших приложениях Quasar.