安装与设置
在使用 Deno 的 HTTP客户端之前,你需要确保已经安装了 Deno。你可以通过以下命令来检查是否已安装 Deno:
deno --version
如果没有安装 Deno,可以参考官方文档进行安装。
Deno 内置了一个强大的 HTTP 客户端,可以直接使用,无需额外安装任何包。接下来我们开始学习如何使用这个内置的 HTTP 客户端。
发送简单的 HTTP 请求
GET 请求
发送一个简单的 GET 请求非常简单。只需使用 fetch 方法,并传入请求的 URL 即可:
const response = await fetch('https://jsonplaceholder.typicode.com/todos/1');
console.log(await response.json());上述代码会从指定的 URL 获取数据并将其解析为 JSON 对象。
POST 请求
对于 POST 请求,你需要传递请求体和一些配置选项:
// www.javascriptcn.com code example
const data = { title: 'foo', body: 'bar', userId: 1 };
const options = {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(data),
};
const response = await fetch('https://jsonplaceholder.typicode.com/posts', options);
console.log(await response.json());这段代码向指定的 URL 发送一个 POST 请求,并将数据作为请求体的一部分。
处理响应
检查状态码
响应对象提供了多种方法来获取有关请求的信息。其中最常用的是 status 和 ok 属性:
const response = await fetch('https://jsonplaceholder.typicode.com/todos/1');
if (!response.ok) {
console.error(`HTTP error! Status: ${response.status}`);
} else {
console.log(await response.json());
}解析响应体
根据响应的内容类型,你可以选择不同的方式来解析响应体。对于 JSON 数据,你可以直接调用 .json() 方法:
const response = await fetch('https://jsonplaceholder.typicode.com/todos/1');
const data = await response.json();
console.log(data);如果响应是文本形式,可以使用 .text() 方法:
const response = await fetch('https://jsonplaceholder.typicode.com/todos/1');
const textData = await response.text();
console.log(textData);设置请求头
在某些情况下,你可能需要向服务器发送自定义的请求头。这可以通过在 fetch 方法的第二个参数中添加 headers 属性来实现:
const response = await fetch('https://jsonplaceholder.typicode.com/todos/1', {
headers: {
'X-Custom-Header': 'Custom Value',
},
});
console.log(await response.json());超时控制
在发送网络请求时,可能会遇到请求超时的情况。Deno 不直接支持设置请求超时,但你可以通过 Promise.race 来实现这一功能:
// www.javascriptcn.com code example
async function fetchWithTimeout(resource, options = {}, timeout = 5000) {
const controller = new AbortController();
const id = setTimeout(() => controller.abort(), timeout);
const response = await fetch(resource, { ...options, signal: controller.signal });
clearTimeout(id);
return response;
}
(async () => {
try {
const response = await fetchWithTimeout('https://jsonplaceholder.typicode.com/todos/1', {}, 2000);
console.log(await response.json());
} catch (error) {
console.error('请求超时:', error);
}
})();这段代码定义了一个 fetchWithTimeout 函数,它会在指定的时间内等待响应。如果超过该时间,请求将被取消,并抛出错误。
错误处理
在实际应用中,错误处理是非常重要的。Deno 提供了多种方法来捕获和处理错误:
try {
const response = await fetch('https://jsonplaceholder.typicode.com/todos/1');
if (!response.ok) throw new Error('Network response was not ok');
console.log(await response.json());
} catch (error) {
console.error('Fetch error:', error);
}在这个例子中,我们使用了 try...catch 结构来捕获可能出现的错误,并进行相应的处理。
自定义中间件
虽然 Deno 的 fetch API 并没有直接提供中间件的概念,但你可以通过封装函数来模拟类似的功能:
// www.javascriptcn.com code example
async function logRequest(url) {
console.log(`Sending request to ${url}`);
const response = await fetch(url);
console.log(`Received response from ${url}`);
return response;
}
(async () => {
const response = await logRequest('https://jsonplaceholder.typicode.com/todos/1');
console.log(await response.json());
})();在这个例子中,我们定义了一个 logRequest 函数,在发送请求前后分别打印日志信息。
以上就是使用 Deno 发送 HTTP 请求的基本方法。希望这些示例能帮助你更好地理解和使用 Deno 的 HTTP 客户端功能。