在 Web 前端开发过程中,我们需要处理许多网络请求。实现网络请求的方式有很多,其中一种比较常见的方式是使用 XMLHttpRequest
(简称 XHR
)。但是 XHR
的使用非常麻烦,且容易产生回调地狱的问题。为了解决这个问题,出现了一个新的网络请求库 —— fetch
。fetch
比 XHR
更加简单易用,而且能够很好地支持 Promise。
但是,在实际项目中,使用 fetch
依然存在一些麻烦。如果我们要发起一个网络请求,需要配置 URL、请求方法、参数、请求头等等参数。而这些参数非常繁琐,如果我们要手动编写这些代码,会产生很多样板代码。
为此,我们引入一个 npm 包 @555platform/client.ts
。它提供了一个非常易用的 API,能够帮助我们简化网络请求的配置。下面就让我们来看一下,如何使用 @555platform/client.ts
。
@555platform/client.ts 的安装
@555platform/client.ts
是一个 npm 包,可以通过以下命令进行安装:
npm install @555platform/client.ts
@555platform/client.ts 的基本使用
首先,我们需要引入 Client
类。Client
类提供了一系列方法,用于配置网络请求的 URL、请求方法、请求头、请求参数等。
-- -------------------- ---- ------- ------ - ------ - ---- ------------------------ ----- ------ - --- -------- -------- --------------------------- -------- - --------------- ------------------- ---------------- ------- ---- - --
上面的代码表示创建了一个 Client
类的实例。其中,baseURL
为请求的基础 URL,headers
为默认的请求头。如果我们每个请求都需要携带一个 Authorization
头部,可以在这里配置。
现在,我们可以发起网络请求了。比如,我们要获取一个资源,可以这样写:
const response = await client.get('resource') const data = await response.json()
上面的代码表示发起一个 GET
请求,请求的 URL 是 https://example.com/api/resource
。response.json()
方法是从响应中获取 JSON 数据。
类似地,还可以发起其他类型的请求,比如 POST
请求:
const response = await client.post('resource', { body: JSON.stringify(data) }) const data = await response.json()
上面的代码表示发起一个 POST
请求,请求的 URL 是 https://example.com/api/resource
,请求的主体是 JSON 数据。在 post
方法的第二个参数中,我们可以配置请求的参数、请求头等。
@555platform/client.ts 的高级使用
除了基本的网络请求,@555platform/client.ts
还提供了一些高级功能,比如错误处理、拦截器等。
错误处理
当服务器返回的状态码不是 2xx
时,有时我们需要对错误进行处理。@555platform/client.ts
提供了 errorHandler
选项,它允许我们在发生错误时进行自定义处理。
const client = new Client({ errorHandler: async (response) => { const data = await response.json() const error = new Error(data.message) error.status = response.status throw error } })
上面的代码表示当服务器返回的状态码不是 2xx
时,会调用 errorHandler
进行处理。errorHandler
是一个异步函数,接受一个 Response
参数。我们可以在这里进行自定义的错误处理逻辑。
拦截器
在实际项目中,我们可能需要在请求发送前、请求发送后、响应接收后等时候添加一些额外的处理逻辑,比如添加请求头、对响应进行统一处理等。@555platform/client.ts
提供了拦截器功能,让我们可以在网络请求过程中插入自定义的代码逻辑。
-- -------------------- ---- ------- ----- ------ - --- -------- -------------------------------------- -- - -------------------- ------ ------ -- ----------------------------------------- -- - -------------------- ------ -------- --
上面的代码表示创建了一个 Client
类的实例,并使用 interceptors
属性添加了两个拦截器。request.use
表示在请求发送前调用,response.use
表示在响应接收后调用。这些拦截器都是异步函数,可以进行诸如添加请求头、对响应进行统一处理等操作。
示例代码
最后,给出一个基于 @555platform/client.ts
进行网络请求的完整示例代码。
-- -------------------- ---- ------- ------ - ------ - ---- ------------------------ ----- ------ - --- -------- -------- --------------------------- -------- - --------------- ------------------- ---------------- ------- ---- -- ------------- ----- ---------- -- - ----- ---- - ----- --------------- ----- ----- - --- ------------------- ------------ - --------------- ----- ----- - -- -------------------------------------- -- - -------------------- ------ ------ -- ----------------------------------------- -- - -------------------- ------ -------- -- ----- -------- ----------- -- - ----- -------- - ----- ---------------------- ----- ---- - ----- --------------- ----------------- - ----- -------- ------------ -- - ----- ---- - - ----- --------- - ----- -------- - ----- ----------------------- - ----- -------------------- -- ----- ------ - ----- --------------- ------------------- - ------------- --------------
在上面的代码中,我们先创建了一个 Client
实例,配置了基础 URL、默认的请求头、错误处理等。然后,使用拦截器添加请求发送前、响应接收后的逻辑。最后,我们编写了两个方法,分别用于发起 GET 请求和 POST 请求,并打印响应结果。
通过使用 @555platform/client.ts
,我们可以轻松地进行网络请求,并且能够很好地处理错误、添加拦截器等。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/108731