axios
开始
一个基于promise可以用于浏览器和node.js的网络请求库,可以允许在浏览器和node中。在node中使用http模块,在浏览器中使用ajax,使用
pnpm add axios
进行安装
基础
axios实例
一般来说我们都通过axios实例来调用其方法。先创建一个实例配置参数,然后将这个实例导出,示例如下
const instance = axios.create({ // 这里设置一些通用配置,下面列举了可配置选项。更多的请参考官网 // `url` 是用于请求的服务器 URL, url: '/user', // 默认值, `method` 是创建请求时使用的方法 method: 'get', // `baseURL` 将自动加在 `url` 前面,除非 `url` 是一个绝对 URL。 // 它可以通过设置一个 `baseURL` 便于为 axios 实例的方法传递相对 URL baseURL: 'https://some-domain.com/api/', // 自定义请求头 headers: {'X-Requested-With': 'XMLHttpRequest'}, // `params` 是与请求一起发送的 URL 参数 // 必须是一个简单对象或 URLSearchParams 对象 params: { ID: 12345 }, // `data` 是作为请求体被发送的数据 data: { firstName: 'Fred' }, // `timeout` 指定请求超时的毫秒数。 timeout: 1000, // 默认值是 `0` (永不超时) // `withCredentials` 表示跨域请求时是否需要使用凭证 withCredentials: false, // default // `adapter` 允许自定义处理请求,这使测试更加容易。 // 返回一个 promise 并提供一个有效的响应 (参见 lib/adapters/README.md)。 adapter: function (config) { /* ... */ }, // `auth` HTTP Basic Auth auth: { username: 'janedoe', password: 's00pers3cret' }, // `responseType` 表示浏览器将要响应的数据类型 // 选项包括: 'arraybuffer', 'document', 'json', 'text', 'stream' // 浏览器专属:'blob' responseType: 'json', // 默认值 // `responseEncoding` 表示用于解码响应的编码 (Node.js 专属) // 注意:忽略 `responseType` 的值为 'stream',或者是客户端请求 // Note: Ignored for `responseType` of 'stream' or client-side requests responseEncoding: 'utf8', // 默认值 // `xsrfCookieName` 是 xsrf token 的值,被用作 cookie 的名称 xsrfCookieName: 'XSRF-TOKEN', // 默认值 // `xsrfHeaderName` 是带有 xsrf token 值的http 请求头名称 xsrfHeaderName: 'X-XSRF-TOKEN', // 默认值 // `onUploadProgress` 允许为上传处理进度事件 // 浏览器专属 onUploadProgress: function (progressEvent) { // 处理原生进度事件 }, // `onDownloadProgress` 允许为下载处理进度事件 // 浏览器专属 onDownloadProgress: function (progressEvent) { // 处理原生进度事件 }, }) export default instance // 导出实例
列举实例方法
下面列举了axios的实例方法,实例方法也可以配置,如下
axios.request(config) axios.get(url[, config]) axios.delete(url[, config]) axios.head(url[, config]) axios.options(url[, config]) axios.post(url[, data[, config]]) axios.put(url[, data[, config]]) axios.patch(url[, data[, config]]) axios.getUri([config]) // config就是实例化axios的那个配置,可以参考上面那个,这里进行第二次配置,会覆盖实例的配置 // 注:在使用别名方法时, url、method、data 这些属性都不必在配置中指定 /* 实例方法返回的结果是一个promise,可以通过then,catch,获取,或者通过await/async 获取 axios.get('/user?ID=12345').then().catch() async function getUser() { const response = await axios.get('/user?ID=12345'); } */
get
const axios = require('axios');
// 向给定ID的用户发起请求
axios.get('/user?ID=12345')
// 上述请求也可以按以下方式完成(可选)
axios.get('/user', {
params: {
ID: 12345
}
})
post
axios.post('/user', {
firstName: 'Fred',
lastName: 'Flintstone'
});
Promise.all(xxx1,xx2) // 由于返回的是promise 可以使用promise的一些api,比如any,all
.then(function ([acct, perm]) {
// ...
});
其他的实例方法都类似
响应结构(response)
{
// `data` 由服务器提供的响应
data: {},
// `status` 来自服务器响应的 HTTP 状态码
status: 200,
// `statusText` 来自服务器响应的 HTTP 状态信息
statusText: 'OK',
// `headers` 是服务器响应头
// 所有的 header 名称都是小写,而且可以使用方括号语法访问
// 例如: `response.headers['content-type']`
headers: {},
// `config` 是 `axios` 请求的配置信息
config: {},
// `request` 是生成此响应的请求
// 在node.js中它是最后一个ClientRequest实例 (in redirects),
// 在浏览器中则是 XMLHttpRequest 实例
request: {}
}
axios.get('/user/12345')
.then(function (response) {
console.log(response.data);
console.log(response.status);
console.log(response.statusText);
console.log(response.headers);
console.log(response.config);
});
默认配置
您可以指定默认配置,它将作用于每个请求
// 全局 axios 默认值 axios.defaults.baseURL = 'https://api.example.com'; axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; ----------------------------------------------------------------------------------------------- // 创建实例时配置默认值 const instance = axios.create({ baseURL: 'https://api.example.com' }); // 创建实例后修改默认值 instance.defaults.headers.common['Authorization'] = AUTH_TOKEN; ------------------------------------------------------------------------------------------------ // 使用库提供的默认配置创建实例 // 此时超时配置的默认值是 `0` const instance = axios.create(); // 重写库的超时默认值 // 现在,所有使用此实例的请求都将等待2.5秒,然后才会超时 instance.defaults.timeout = 2500; // 重写此请求的超时时间,因为该请求需要很长时间 instance.get('/longRequest', { timeout: 5000 });
拦截器
在请求或响应被 then 或 catch 处理前拦截它们
request
// 添加请求拦截器
axios.interceptors.request.use(function (config) {
// 在发送请求之前做些什么
return config;
}, function (error) {
// 对请求错误做些什么
return Promise.reject(error);
});
response
// 添加响应拦截器
axios.interceptors.response.use(function (response) {
// 2xx 范围内的状态码都会触发该函数。
// 对响应数据做点什么
return response;
}, function (error) {
// 超出 2xx 范围的状态码都会触发该函数。
// 对响应错误做点什么
return Promise.reject(error);
});
请求体编码
application/x-www-form-urlencoded
是axios默认的选项,在浏览器中可以使用
URLSearchParams
API 示例如下
const params = new URLSearchParams(); params.append('param1', 'value1'); params.append('param2', 'value2'); axios.post('/foo', params);
其实吧,如果请求头header
content-type: 'application/x-www-form-urlencoded'
存在会自动编码的,示例如下
const data = {; await axios.post('https://postman-echo.com/post', { name: '张三', age: 21 }, { headers: { 'content-type': 'application/x-www-form-urlencoded' } }); // 这样写的话无需手动编码data
multipart/form-data
这种格式一般用于传输二进制文件和其他类型混合的数据,实例如下
const form = new FormData(); form.append('my_field', 'my value'); form.append('my_buffer', new Blob([1,2,3])); form.append('my_file', fileInput.files[0]); axios.post('https://example.com', form)
或者提供内置的方法
postForm
axios.postForm('https://httpbin.org/post', { my_field: 'my value', my_buffer: new Blob([1,2,3]), my_file: fileInput.files // FileList will be unwrapped as sepate fields });
其实吧,如果请求头header
content-type: 'multipart/form-data'
存在会自动编码的,示例如下
axios.post('https://httpbin.org/post', { user: { name: 'Dmitriy' }, file: fs.createReadStream('/foo/bar.jpg') }, { headers: { 'Content-Type': 'multipart/form-data' } }).then(({data})=> console.log(data));
Axios支持以下别名方法:
postForm
,putForm
,patchForm
,这些方法只是对应的 HTTP 方法,其 content-type 头部默认设为multipart/form-data
// FileList 对象可以被直接传递: await axios.postForm('https://httpbin.org/post', document.querySelector('#fileInput').files) // 所有文件将使用相同的字段名files[]发送
本文来自博客园,作者:Pro成,转载请注明原文链接:https://www.cnblogs.com/ProCheng/p/17397815.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南