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'
  }
})
复制代码
相关推荐
美狐美颜SDK开放平台12 分钟前
美颜SDK接入流程详解:Android、iOS、鸿蒙兼容方案解析
android·人工智能·ios·华为·harmonyos·美颜sdk·视频美颜sdk
笔夏2 小时前
【安卓学习之FloatingActionButton】按钮太小
android·学习
XD7429716362 小时前
科技早报晚报|2026年5月15日:无摄像头空间感知、Android 设备实验室与视频检索代理,今天更值得跟进的 3 个技术机会
android·科技·音视频·开源项目·边缘ai·开发者工具
应用市场3 小时前
Android Verified Boot 2.0 安全启动原理详解
android·安全
只可远观3 小时前
Android XML命令式和Jetpack Compose声明式UI
android·xml
他是龙5513 小时前
DVWA 靶场深度解析:文件包含 & 文件上传(Low → Impossible)
android
_李小白3 小时前
【Android车载学习笔记】第一天:Android Automotive OS介绍
android·笔记
aqi003 小时前
FFmpeg开发笔记(一百零一)跨平台的开源音视频移动框架MobileFFmpeg
android·ffmpeg·音视频·直播·流媒体
2301_811130544 小时前
【保姆级教程】Android Studio完整安装步骤(2026最新版,新手零踩坑)
android·java