baseURL

有些时候,我们会请求某个域名下的多个接口,我们不希望每次发送请求都填写完整的 url,希望可以配置一个 baseURL,之后都可以传相对路径。如下:

const instance = axios.create({
  baseURL: 'https://some-domain.com/api'
})

instance.get('/get')

instance.post('/post')

我们一旦配置了 baseURL,之后请求传入的 url 都会和我们的 baseURL 拼接成完整的绝对地址,除非请求传入的 url 已经是绝对地址。

首先修改一下类型定义。

types/index.ts

export interface AxiosRequestConfig {
  // ...
  baseURL?: string
}

接下来实现 2 个辅助函数。

helpers/url.ts

export function isAbsoluteURL(url: string): boolean {
  return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url)
}

export function combineURL(baseURL: string, relativeURL?: string): string {
  return relativeURL ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '') : baseURL
}

最后我们来调用这俩个辅助函数。

core/dispatchRequest.ts

function transformURL(config: AxiosRequestConfig): string {
  let { url, params, paramsSerializer, baseURL } = config
  if (baseURL && !isAbsoluteURL(url!)) {
    url = combineURL(baseURL, url)
  }
  return buildURL(url!, params, paramsSerializer)
}

const instance = axios.create({
  baseURL: 'https://img.mukewang.com/'
})

instance.get('5cc01a7b0001a33718720632.jpg')

instance.get('https://img.mukewang.com/szimg/5becd5ad0001b89306000338-360-202.jpg')

这个 demo 非常简单,我们请求了慕课网的 2 张图片,注意当第二个请求 url 已经是绝对地址的时候,我们并不会再去拼接 baseURL

至此,ts-axios 就实现了 baseURL 的配置功能,接下来我们来实现 ts-axios 的静态方法扩展。

03-16
### BaseUrl 在 Web 开发中的用法及配置方法 #### 1. 基础概念 `BaseUrl` 是指应用程序访问外部服务或接口的基础路径。它通常被用来定义一组统一的前缀,从而减少硬编码并提高可维护性。通过 `updateBaseUrl(BaseUrl baseUrl)` 方法可以动态修改基础路径[^1]。 #### 2. 配置方式 在实际项目中,`BaseUrl` 的配置可以通过多种方式进行设置: - **环境变量存储** 将 `BaseUrl` 存储到环境变量中是一种常见的做法。这种方式能够方便地切换不同的运行环境(如开发、测试、生产)。例如,在 Node.js 中,可以通过 `.env` 文件来管理这些变量: ```javascript require('dotenv').config(); const BASE_URL = process.env.BASE_URL; console.log(BASE_URL); ``` - **模型配置文件** 如果涉及多个平台或者复杂的业务逻辑,可以在专门的配置文件中集中管理 `BaseUrl` 及其他相关参数。比如新建一个 TypeScript 文件 `src/config/models.ts` 来存放不同平台的 AI 模型配置,并从中读取 API 密钥和基础 URL[^3]: ```typescript export interface ModelConfig { apiKey: string; baseUrl: string; modelName: string; } const modelConfigs: { [key: string]: ModelConfig } = { platformA: { apiKey: process.env.PLATFORM_A_API_KEY || '', baseUrl: process.env.PLATFORM_A_BASE_URL || '', modelName: 'model-a', }, platformB: { apiKey: process.env.PLATFORM_B_API_KEY || '', baseUrl: process.env.PLATFORM_B_BASE_URL || '', modelName: 'model-b', }, }; export default modelConfigs; ``` #### 3. 使用场景 当使用 Web 组件加载远程资源时,`BaseUrl` 往往作为核心部分参与其中。例如,如果需要加载某个网页资源,则可通过 `WebOptions` 参数指定其来源地址[^2]: ```javascript const webOptions = { src: `${BASE_URL}/path/to/resource`, controller: new WebController(), }; ``` 这里需要注意的是,`controller` 对象必须先与对应的 Web 组件绑定后才能正常工作。 #### 4. 动态更新机制 对于某些特殊需求而言,可能还需要支持运行期间对 `BaseUrl` 进行动态调整。这便需要用到前面提到的方法——`updateBaseUrl()`。具体实现上可以根据实际情况设计成全局状态管理工具的一部分或者是独立的服务类形式存在。 #### 5. 结合 Ajax 实现前后端交互 Ajax 技术允许客户端发起异步 HTTP 请求而无需刷新整个页面,这对于改善用户体验至关重要。而在基于 MyBatis 构建的数据持久层框架下,服务器端会负责执行 SQL 查询并将结果返回给前端展示出来[^4]。此时同样离不开正确设定好的 `BaseUrl` 地址以便于定位目标 RESTful 接口位置。 ```javascript function fetchData() { $.ajax({ url: `${BASE_URL}/api/data`, method: 'GET', success(data) { console.log('Data fetched successfully:', data); }, error(xhr, status, err) { console.error('Error fetching data:', err); } }); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值