跳至主要内容

send()

描述

向服务器发送所需的 HTTP 请求,并根据请求类型返回带或不带数据的 promise

所有对服务器的请求均通过 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可选。默认请求头为设置为 application/jsonContent-Type 头。可通过 customHeaders 参数添加更多可选请求头。请参阅下方示例

响应

该方法根据请求类型返回带或不带数据的 promise 对象。

请求成功时返回 promise。若请求失败(response.status == 500),则抛出包含错误信息的异常。

您可以配置返回的内容。要处理失败请求的响应,请使用返回的 promise 的 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);

相关文章与服务器协作