request 模块
字数
1216 字
阅读时间
6 分钟
温馨提示
本文由AI辅助生成,可能存在不准确性。
request模块提供了网络请求相关的工具函数,扩展了axios的基础功能。
竞速请求
raceRequest
同时向多个URL发送请求,返回最先成功响应的数据。
typescript
import { raceRequest } from 'node-karin'
import type { AxiosRequestConfig } from 'axios'
/**
* 竞速请求 返回最先成功响应的数据
* @param urls 请求地址数组
* @param config 请求配置,默认为 { method: 'HEAD', timeout: 10000 }
* @returns 返回最先成功响应的数据,如果全部失败则返回null
*/
// 基本用法 - HEAD请求
const urls = ['https://api.github.com', 'https://api.gitee.com']
const response = await raceRequest(urls)
// 自定义配置 - POST请求
const postUrls = ['https://api1.example.com/post', 'https://api2.example.com/post']
const postResponse = await raceRequest(postUrls, {
method: 'post',
data: { foo: 'bar' },
timeout: 5000 // 超时时间5秒
})
// 处理响应
if (postResponse) {
console.log('最快响应的URL:', postResponse.config.url)
console.log('响应数据:', postResponse.data)
} else {
console.log('所有请求都失败了')
}
函数说明
这个函数会同时向多个URL发送相同的请求,并返回最先成功响应的结果。这在以下场景特别有用:
- 当你有多个可用的API端点,想使用响应最快的那个
- 当你需要从多个镜像站点获取资源
- 实现简单的负载均衡或故障转移机制
参数
urls
: 字符串数组,包含多个要请求的URLconfig
: Axios请求配置对象,默认值:typescript{ method: 'HEAD', // 默认使用HEAD请求 timeout: 10000 // 默认超时时间10秒 }
返回值
- 成功时: 返回最先成功的AxiosResponse对象
- 失败时: 如果所有请求都失败,则返回null
注意事项
- 默认使用HEAD请求方法,这对于简单检测URL可达性很有用
- 如果需要获取实际内容,可以将方法改为GET、POST等
- 当所有请求都失败或超时时,函数将返回null
pingRequest
测试多个URL的网络可达性和响应速度,可用于选择最快的服务器或检测网络状态。
typescript
import { pingRequest } from 'node-karin'
import type { ExtendedAxiosRequestConfig } from 'node-karin'
/**
* 测试网络连接
* @param urls 要测试的URL数组
* @param config 扩展的请求配置
* @returns 根据配置返回不同结果
*/
// 默认模式 - 返回所有成功URL的数组
const urls = ['https://api.github.com', 'https://api.gitee.com']
const successUrls = await pingRequest(urls)
console.log('成功连接的URL列表:', successUrls)
// 输出示例: 成功连接的URL列表: ['https://api.github.com', 'https://api.gitee.com']
// 基本用法 - 测试多个URL并获取详细结果
const detailedResults = await pingRequest(urls, { detailed: true })
console.log(detailedResults)
// 输出结果示例:
// [
// {
// url: 'https://api.github.com',
// success: true,
// error: null,
// duration: 235 // 毫秒
// },
// {
// url: 'https://api.gitee.com',
// success: true,
// error: null,
// duration: 142 // 毫秒
// }
// ]
// 竞速模式 - 只返回最快的URL
const fastestUrl = await pingRequest(urls, { isRace: true })
console.log('最快的URL:', fastestUrl)
// 输出: 最快的URL: https://api.gitee.com
// 竞速模式并获取详细信息
const fastestDetail = await pingRequest(urls, { isRace: true, detailed: true })
console.log('最快的URL详情:', fastestDetail)
// 输出示例:
// 最快的URL详情: {
// url: 'https://api.gitee.com',
// success: true,
// error: null,
// duration: 142
// }
函数说明
这个函数同时测试多个URL的连接情况,可选择获取详细的测试结果或采用竞速模式返回最快的URL。适用于:
- 测试多个服务器的响应速度
- 选择最快的API端点或镜像站点
- 诊断网络连接问题
参数
urls
: 字符串数组,包含多个要测试的URLconfig
: 扩展的Axios请求配置对象,支持以下特殊选项:typescript{ method: 'HEAD', // 默认使用HEAD请求 timeout: 10000, // 默认超时时间10秒 detailed: false, // 是否返回详细信息 isRace: false, // 是否使用竞速模式 successCodes: [200] // 成功状态码列表 }
返回值
返回类型取决于配置参数:
- 普通模式 + 非详细信息 (默认): 返回所有成功URL的数组
- 普通模式 + 详细信息: 返回所有URL的测试详情数组
- 竞速模式 + 非详细信息: 返回最快成功响应的URL或null
- 竞速模式 + 详细信息: 返回最快成功响应的详细信息或null
注意事项
- 默认使用HEAD请求方法,减少数据传输
- 竞速模式下,只有成功响应的URL才会被考虑
- 如果所有请求都失败,竞速模式将返回null