Фреймворк Mithril предоставляет компактный и мощный инструмент для
работы с HTTP-запросами — встроенный модуль m.request. Он
объединяет функциональность fetch и промисов, обеспечивая
удобный и последовательный способ взаимодействия с сервером в
приложениях на JavaScript.
m.request
поддерживает методы GET, POST,
PUT, DELETE и другие стандартные
HTTP-методы.m.request возвращает
промис, который отклоняется при сетевых ошибках или кодах состояния, не
попадающих под 2xx.m.request({
method: "GET",
url: "/api/users",
}).then(function(data) {
console.log(data);
}).catch(function(error) {
console.error(error);
});
Пояснения к ключевым параметрам:
method — HTTP-метод запроса (GET,
POST, PUT, DELETE и т.д.).url — адрес ресурса. Можно использовать относительные и
абсолютные пути.body — тело запроса для методов, отличных от
GET. Может быть объектом JavaScript.headers — дополнительные заголовки запроса.withCredentials — булево значение для отправки куки и
авторизационных данных при кросс-доменных запросах.GET-запрос с параметрами:
m.request({
method: "GET",
url: "/api/items",
params: { category: "books", limit: 10 }
}).then(function(items) {
console.log(items);
});
Параметр params автоматически сериализуется в строку
запроса.
POST-запрос с телом:
m.request({
method: "POST",
url: "/api/items",
body: { name: "New Item", price: 100 },
}).then(function(response) {
console.log(response);
});
m.request автоматически сериализует объект в JSON и
добавляет заголовок Content-Type: application/json, если
заголовок не задан вручную.
m.request возвращает промис, который может быть
обработан через .catch. Ошибки делятся на сетевые и
серверные:
m.request({
method: "GET",
url: "/api/unknown"
}).then(function(data) {
console.log(data);
}).catch(function(error) {
console.error("Ошибка запроса:", error.message);
});
Для тонкой настройки обработки можно использовать
deserialize и extract:
m.request({
method: "GET",
url: "/api/items",
deserialize: function(responseText) {
const data = JSON.parse(responseText);
return data.items;
}
}).then(function(items) {
console.log(items);
});
Для единообразия запросов можно задать глобальные настройки:
m.request = m.request.defaults({
headers: { Authorization: "Bearer TOKEN" },
withCredentials: true
});
Теперь все последующие вызовы m.request будут
наследовать эти параметры, что упрощает работу с аутентификацией и
общими заголовками.
Данные, полученные через m.request, удобно интегрировать
с состоянием компонента:
var UserList = {
users: [],
oninit: function() {
m.request({ method: "GET", url: "/api/users" })
.then(users => UserList.users = users);
},
view: function() {
return m("ul", UserList.users.map(user => m("li", user.name)));
}
};
Асинхронное получение данных и их автоматическое отображение в виртуальном DOM — один из ключевых подходов в Mithril.
m.prop для хранения и повторного использования данных.extract можно реализовать централизованную обработку кодов
состояния.m.request позволяет работать с текстовыми, бинарными и
другими форматами данных.m.request({
method: "GET",
url: "/api/file",
responseType: "blob"
}).then(function(blob) {
console.log("Получен файл", blob);
});
.catch для предотвращения
необработанных ошибок.defaults.m.request позволяет легко строить реактивные интерфейсы с
минимальным количеством кода.m.request — это компактное, гибкое и интегрированное
решение для работы с HTTP в Mithril, способное заменить необходимость
прямого использования fetch или сторонних библиотек. Его
возможности включают как базовые GET/POST-запросы, так и расширенные
сценарии с обработкой ошибок, десериализацией и интеграцией с
компонентами.