Перейти к основному содержимому

send()

Описание

Отправляет необходимый HTTP-запрос на сервер и возвращает промис с данными или без них в зависимости от запроса

Все запросы к серверу выполняются с помощью метода send(), который является частью сервиса RestDataProvider.

Использование

send(
url: string,
method: "GET" | "POST" | "PUT" | "DELETE" | string,
data?: object,
headers?: object,
): Promise<obj[]>

Параметры

ИмяТипОписание
urlstringОбязательный. Путь к серверу, на который отправляется запрос.
methodstringОбязательный. Тип HTTP-метода (Get, Post, Put, Delete).
dataobjectНеобязательный. Параметры, отправляемые на сервер. По умолчанию передаются параметры сработавшего события, однако вы можете добавить дополнительные параметры через пользовательский объект. См. Пример ниже.
headersobjectНеобязательный. По умолчанию используется заголовок Content-Type со значением application/json. Дополнительные заголовки можно добавить через параметр customHeaders. См. Пример ниже.

Ответ

Метод возвращает объект промиса с данными или без них в зависимости от запроса.

Промис возвращается при успешном статусе запроса. В случае неудачного запроса (response.status == 500) выбрасывается исключение с текстом ошибки.

Вы можете настроить, что именно возвращать. Для обработки ответа на неудачный запрос используйте метод catch возвращаемого промиса.


restDataProvider.send(url, method, data)
.then(data => {
... // успех: делаем что-то с данными
})
.catch(err => {
... // обработчик ошибки
});

Примеры

Пример ниже показывает, как отправить запрос с дополнительными параметрами помимо стандартных:

const { ToDo, Toolbar, RestDataProvider } = todo;

const activeProject = null;
const url = "http://localhost:3000";
const restProvider = new RestDataProvider(url);

Promise.all([
restProvider.getProjectTasks(activeProject),
restProvider.getProjects(),
]).then(([tasks, projects]) => {
const list = new ToDo("#root", {
tasks,
projects,
activeProject,
});
const toolbar = new Toolbar("#toolbar", {
api: list.api,
});

list.api.on("set-project", obj => {
obj.custom = "custom event";
restDataProvider.send(`tasks/projects/0`, "GET", obj).then(data => {
list.api.parse({ tasks: data });
return Promise.resolve();
});
});

list.api.setNext(restProvider);
restProvider.setAPI(list.api);
});

Следующие примеры показывают, как добавить дополнительные заголовки в метод send.

const customHeaders = {
"Authorization": "Bearer",
"Custom header": "some value",
};

list.api.on("add-task", obj => {
restDataProvider.send("tasks", "POST", obj, customHeaders);
});

Или вы можете добавить заголовки следующим способом — переопределив RestDataProvider, что даёт больше контроля над отправляемыми данными:

const { ToDo, Toolbar, RestDataProvider } = todo;
...
// Инициализация ToDo
...

class MyDataProvider extends RestDataProvider {
send(url, method, data, headers) {
headers = { ...headers, "SomeToken": "abc" };
return super.send(url, method, data, headers);
}
}

const myProvider = new MyDataProvider(url);
list.api.setNext(myProvider);
myProvider.setAPI(list.api);

Связанные статьи: Работа с сервером