简介
@cqlinkoff/request
是一款基于 Node.js 的 HTTP 请求库,提供了简单易用的 API,可轻松地实现发送 HTTP 请求并处理响应数据。该库支持多种请求方法,包括 GET、POST、PUT、DELETE、HEAD、OPTIONS 等,同时具备请求重试、超时控制、请求限流等功能,是前端开发中必备的工具之一。
安装
使用 @cqlinkoff/request
库前,需要在项目中先进行安装。
可以通过 npm 命令直接安装:
npm install @cqlinkoff/request
或者在 package.json
文件中添加以下依赖:
"@cqlinkoff/request": "^1.0.0"
使用方法
基本用法
@cqlinkoff/request
提供了多个 API 用于发送 HTTP 请求。其中,最基本的 API 是 request()
方法,该方法支持的参数如下:
url
:请求地址,必填参数。options
:请求配置,可选参数,包括请求方法、请求头、请求体、超时时间等。
以下是使用 request()
方法发送 GET 请求的示例:
const request = require('@cqlinkoff/request'); request('https://api.example.com/users') .then(res => console.log(res)) .catch(err => console.error(err));
上述代码中,我们发送了一个 GET 请求,该请求的 URL 为 https://api.example.com/users
,并在请求成功后输出了响应数据。如果请求发生了错误,则会在控制台上输出错误信息。需要注意的是,request()
方法返回的是一个 Promise 对象,因此我们可以使用 .then()
方法和 .catch()
方法对请求结果进行处理。
请求方法
@cqlinkoff/request
还提供了多种 RESTful API 请求方法,包括 GET、POST、PUT、DELETE、HEAD、OPTIONS 等。
使用这些方法时,只需将方法名作为 options
参数的一部分即可。例如:
-- -------------------- ---- ------- ----- ------- - ------------------------------ -- -- ---- -- ---------------------------------------- - ------- ------- ----- - ----- ------- ---- -- -- -------- - --------------- ------------------ - ----------- -- ----------------- ---------- -- --------------------
上述代码中,我们发送了一个 POST 请求,将一条 JSON 数据发送到指定的 API 地址中。需要注意的是,在请求体中,我们需要设置 Content-Type
字段为 application/json
,以便服务器可以正确解析请求数据。
配置项
除了请求方法和请求体等内容,我们还可以通过 options
参数配置多个选项,以达到更好的请求控制和响应处理。
以下是常用的一些配置项:
headers
请求头部对象,用于指定请求中的附加信息,例如身份验证等。
const request = require('@cqlinkoff/request'); // 发送带有 Authorization 请求头的 GET 请求 request('https://api.example.com/users', { method: 'GET', headers: { Authorization: 'Bearer 123456' } }).then(res => console.log(res)) .catch(err => console.error(err));
上述代码中,我们在请求头中添加了 Authorization
字段,用于传递身份验证信息。该字段的值为 Bearer 123456
,其中 123456
表示认证信息的 token。
json
指示是否自动将响应数据解析为 JSON 对象,默认为 true
。
如果指定该项为 false
,那么响应数据将作为字符串进行返回。
const request = require('@cqlinkoff/request'); // 发送 GET 请求,将响应数据解析为字符串 request('https://api.example.com/users', { method: 'GET', json: false }).then(res => console.log(res)) .catch(err => console.error(err));
上述代码中,我们发送了一个 GET 请求,但在请求配置中指定了 json: false
,因此响应数据将作为字符串进行处理。
timeout
指定请求的超时时间,单位为毫秒,默认值为 30000
。
const request = require('@cqlinkoff/request'); // 发送 GET 请求,设置超时时间为 10 秒 request('https://api.example.com/users', { method: 'GET', timeout: 10000 }).then(res => console.log(res)) .catch(err => console.error(err));
如上所述,在请求配置中设置 timeout
选项即可指定请求的超时时间。如果请求时间超过指定的超时时间,则请求将被取消,并在控制台输出超时错误信息。
retry
指定请求重试的次数和间隔时间,格式为 {times: number, delay: number}
。
该选项用于在请求失败后进行重试,以提高请求成功率。其中 times
表示重试的次数,delay
表示重试间隔时间。例如:
const request = require('@cqlinkoff/request'); // 发送 GET 请求,并在请求失败后进行重试 request('https://api.example.com/users', { method: 'GET', retry: { times: 3, delay: 500 } }).then(res => console.log(res)) .catch(err => console.error(err));
如上所述,在请求配置中设置 retry
选项即可指定请求重试次数和间隔时间。在该示例中,请求将重试 3 次,每次间隔 0.5 秒。
错误处理
在使用 @cqlinkoff/request
库时,我们需要对发生的错误进行处理,以避免对整个程序的影响。
库中可能发生的错误包括:
错误码为 404、500 等 HTTP 错误状态码
这种错误会在请求结束后返回给客户端,因此我们需要在 .then()
方法中通过判断 HTTP 状态码来进行处理。
-- -------------------- ---- ------- ----- ------- - ------------------------------ -- -- --- ------ ---- ---- --- --- ---------------------------------------- - ------- ----- ----------- -- - -- ----------- --- ---- - ---------------------- ------ --- --------- - ---- - ---------------------- - ------------ -- --------------------
上述代码中,我们在请求结束后判断响应状态码,若为 404 则在控制台输出错误信息。否则,将响应数据输出到控制台。
网络错误
网络错误包括连接超时、DNS 解析错误等,这些错误通常无法通过 HTTP 状态码来判断,因此我们需要对 .catch()
方法进行处理。
-- -------------------- ---- ------- ----- ------- - ------------------------------ -- -- --- ---------- ---------------------------------------- - ------- ----- ----------- -- ----------------- ---------- -- - -- --------- --- --------------- - ---------------------- ------ ---------- ---------- - ---- - ------------------- - ---
如上所述,在 .catch()
中判断错误码,通过 err.code
属性来判断网络错误并进行处理。
总结
通过本文,我们对 @cqlinkoff/request
库进行了详细的介绍,并通过示例代码展示了库的基本使用方法、请求方法、配置项、错误处理等内容。希望本文能够为正在学习前端开发的读者们提供帮助,并带来学习体验上的进步。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600671a330d092702382240e