js适配器模式

适配器模式通过把一个类的接口变换成客户端所期待的另一种接口 ,可以帮我们解决不兼容的问题。

应用

js 复制代码
// Ajax适配器函数,入参与旧接口保持一致
async function AjaxAdapter(type, url, data, success, failed) {
    const type = type.toUpperCase()
    let result
    try {
         // 实际的请求全部由新接口发起
         if(type === 'GET') {
            result = await HttpUtils.get(url) || {}
        } else if(type === 'POST') {
            result = await HttpUtils.post(url, data) || {}
        }
        // 假设请求成功对应的状态码是1
        result.statusCode === 1 && success ? success(result) : failed(result.statusCode)
    } catch(error) {
        // 捕捉网络错误
        if(failed){
            failed(error.statusCode);
        }
    }
}

// 用适配器适配旧的Ajax方法
async function Ajax(type, url, data, success, failed) {
    await AjaxAdapter(type, url, data, success, failed)
}

axios中的适配器

在axios中,适配器模式是通过adapter函数来实现的。adapter函数是一个高阶函数,它接受一个config对象作为参数,并返回一个新的config对象。

adapter函数中,可以对config对象进行修改和扩展,以适应不同的环境和需求。

例如,可以在adapter函数中添加请求拦截器和响应拦截器,以实现对请求和响应的统一处理。 同时,adapter函数还可以根据不同的环境和需求,选择不同的适配器来处理请求。

例如,在浏览器环境中,可以使用XMLHttpRequest适配器来发送请求;

在Node.js环境中,可以使用http适配器来发送请求。 具体来说,axios中的适配器模式实现了以下功能:

  1. 请求拦截器:在发送请求之前,可以对请求进行拦截和处理。例如,可以在请求拦截器中添加请求头、修改请求参数等。
  2. 响应拦截器:在接收到响应之后,可以对响应进行拦截和处理。例如,可以在响应拦截器中解析响应数据、处理错误信息等。
  3. 适配器选择:根据不同的环境和需求,选择不同的适配器来处理请求。例如,在浏览器环境中,可以使用XMLHttpRequest适配器来发送请求;在Node.js环境中,可以使用http适配器来发送请求。
  4. 请求发送:根据选择的适配器,发送请求并返回响应。 通过这种方式,axios可以实现对不同环境和需求的适配,同时也可以提高代码的可维护性和可扩展性。
js 复制代码
// Make a request for a user with a given ID
axios.get('/user?ID=12345')
  .then(function (response) {
    // handle success
    console.log(response);
  })
  .catch(function (error) {
    // handle error
    console.log(error);
  })
  .then(function () {
    // always executed
  })   
     
axios.post('/user', {
    firstName: 'Fred',
    lastName: 'Flintstone'
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });   

axios({
  method: 'post',
  url: '/user/12345',
  data: {
    firstName: 'Fred',
    lastName: 'Flintstone'
  }
})
复制代码
相关推荐
y***13646 小时前
【MySQL】MVCC详解, 图文并茂简单易懂
android·数据库·mysql
w***48826 小时前
【MySQL】视图、用户和权限管理
android·网络·mysql
阿道夫小狮子6 小时前
Android 反射
android·前端·javascript
沐怡旸6 小时前
【翻译】scrcpy(3.3.3)命令使用文档
android
沐怡旸6 小时前
【翻译】adb(Android Debug Bridge) 帮助文档
android
QING6186 小时前
Kotlin 协程中Job和SupervisorJob —— 新手指南
android·kotlin·android jetpack
lichong9517 小时前
android 使用 java 编写网络连通性检查
android·java·前端
Digitally7 小时前
如何从iPhone切换到Android
android·ios·iphone
2501_916007477 小时前
苹果应用商店上架的系统逻辑,从产品开发到使用 开心上架 上架IPA 交付审核流程
android·ios·小程序·https·uni-app·iphone·webview
r***86987 小时前
搭建Golang gRPC环境:protoc、protoc-gen-go 和 protoc-gen-go-grpc 工具安装教程
android·前端·后端