📜  模做角度 httpclient - Javascript (1)

📅  最后修改于: 2023-12-03 14:55:52.365000             🧑  作者: Mango

以模块化角度理解 Javascript 的 HttpClient

在现代 web 应用程序中,客户端经常需要与服务器进行通信。Javascript 的 HttpClient 模块是客户端发起 HTTP 请求的常用方式。在本文中,我们将从模块化角度深入探讨 HttpClient 的使用和优化。

HttpClient 模块的安装和导入

HttpClient 模块通常是通过包管理器(如 npm)来安装和使用的。在终端中运行以下命令即可安装 HttpClient:

npm install axios

在使用 HttpClient 时,我们需要将它导入到我们的代码中。这可以通过以下语句完成:

const axios = require('axios');
HttpClient 实例的创建和使用

在使用 HttpClient 发起 HTTP 请求之前,我们需要先创建一个 HttpClient 实例。通常,我们通过传入一些配置选项来创建 HttpClient 实例。

const httpClient = axios.create({
  baseURL: 'http://example.com/api',
  headers: {
    common: {
      Authorization: 'Bearer ' + localStorage.getItem('token')
    }
  }
});

在这个例子中,我们创建一个名为 httpClient 的 HttpClient 实例,它有一个基础 URL(http://example.com/api)和一个 HTTP 头(Authorization: Bearer <token>)。这里的 token 是从 localStorage 中获取的。

现在我们可以使用 httpClient 实例来发起 HTTP 请求。例如,我们可以使用以下语句获取一个用户的信息:

httpClient.get('/user/123')
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    console.error(error);
  });

在这个例子中,我们使用 httpClient 实例的 get 方法来发起一个 GET 请求,请求的 URL 是 /user/123。当请求成功时,then 方法会被调用,并输出响应内容;当请求失败时,catch 方法会被调用,并输出错误信息。

HttpClient 拦截器的使用

HttpClient 拦截器是用来在发起 HTTP 请求之前或响应返回之后处理请求的函数。通常,拦截器可以用来添加/修改请求参数、添加/修改请求头、修改响应数据、处理错误信息等。

在 HttpClient 中,我们可以通过以下方法添加一个请求拦截器:

httpClient.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    config.headers.Authorization = 'Bearer ' + localStorage.getItem('token');
    return config;
  }, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});

在这个例子中,我们添加了一个请求拦截器,在发送请求之前会向请求头中添加一个名为 Authorization 的字段,并在其中添加 token。接下来,我们可以通过以下语句获取一个用户的信息:

httpClient.get('/user/123')
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    console.error(error);
  });

在发送这个请求之前,HttpClient 会调用我们的请求拦截器函数。在这个函数中,我们添加了 Authorization 头,HttpClient 会将其添加到请求中,然后发送请求。当请求成功时,then 方法会被调用,并输出响应内容;当请求失败时,catch 方法会被调用,并输出错误信息。

除了请求拦截器之外,HttpClient 还支持响应拦截器,它可以在响应返回后对响应数据进行处理。我们可以通过以下方法添加一个响应拦截器:

httpClient.interceptors.response.use(function (response) {
    // 在响应数据之前做些什么
    response.data = response.data.map(user => {
      return {
        name: user.name.toUpperCase(),
        age: user.age
      };
    });
    return response;
  }, function (error) {
    // 对响应错误做些什么
    return Promise.reject(error);
});

在这个例子中,我们添加了一个响应拦截器,在收到响应之后,我们将调用该函数。在这个函数中,我们将返回的数据(用户列表)进行修改,将每个用户名都转换为大写形式。接下来,我们可以通过以下语句获取一个用户列表:

httpClient.get('/users')
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    console.error(error);
  });

在接收到响应后,HttpClient 会调用我们的响应拦截器函数。在这个函数中,我们将返回的数据进行修改,然后将其返回给 then 方法。

结论

模块化是 JavaScript 应用程序中的一个重要主题。在本文中,我们探讨了 HttpClient 模块的使用和优化。我们了解到了如何创建和使用 HttpClient 实例,以及如何使用拦截器来处理 HTTP 请求和响应。在实际应用程序中,我们可以根据需求来使用 HttpClient,并在通信时获得更好的控制和灵活性。