本文对axios官网文档的config配置部分进行了翻译与部分举例,原版请前往 axios
{
// ‘url’是用于请求的服务器 URL。
url: '/user',
// ‘method’是发出请求时使用的请求方法。
method: 'get', // 默认值
/*
除非 url 是绝对的,否则 baseURL 将会被加在 url 前面。
为 axios 的实例设置‘baseURL’来传递相对 url 会很方便。
可以减去许多重复的字段。
*/
baseURL: 'https://some-domain.com/api/',
/*
‘transformRequest’允许在请求数据发送到服务器之前对其进行更改,
这只适用于请求方法“ PUT”、“ POST”、“ PATCH”和“ DELETE”。
数组中的最后一个函数必须返回一个字符串或一个Buffer、ArrayBuffer、FormData 或 Stream 的实例。
可以修改 headers 对象。
*/
transformRequest: [function (data, headers) {
// 做任何你想转换数据的事情
return data;
}],
// `transformresponse` 允许在将响应数据传递给 then/catch 之前对其进行更改。
transformResponse: [function (data) {
// 做任何你想转换数据的事情
return data;
}],
// `headers` 是要发送的自定义标头。
headers: {'X-Requested-With': 'XMLHttpRequest'},
/*
URLSearchParams对象举例:
let paramsString = "q=URLUtils.searchParams&topic=api"
let searchParams = new URLSearchParams(paramsString);
for (let p of searchParams) {
console.log(p);
// 结果打印两个json对象
// ["q", "URLUtils.searchParams"]
// ["topic", "api"]
}
*/
// `params` 是要随请求发送的 URL 参数。
// 必须是普通对象或 URLSearchParams 对象。
params: {
ID: 12345
},
// `paramsSerializer` 是一个可选函数,负责序列化 `params`。
// (例如:https://www.npmjs.com/package/qs, http://api.jquery.com/jquery.param/)
paramsSerializer: function (params) {
return Qs.stringify(params, {arrayFormat: 'brackets'})
},
/*
`data` 是要作为请求正文发送的数据。
仅适用于请求方法 'PUT'、'POST'、'DELETE 和 'PATCH'。
当没有设置 `transformRequest` 时,必须是以下类型之一:
- 字符串、普通对象、ArrayBuffer、ArrayBufferView、URLSearchParams
- 仅限浏览器:FormData、File、Blob
- 仅限Node:Stream、Buffer
*/
data: {
firstName: 'Fred'
},
// 将数据发送到 body 方法的语法替代方法。
// post 只发送值,而不是键。
data: 'Country=Brasil&City=Belo Horizonte',
// `timeout` 指定请求超时前的毫秒数。如果请求时间超过`timeout`,请求将被中止。
timeout: 1000, // 默认是0
// `withCredentials` 指示是否应使用凭据进行跨站点访问控制请求。
withCredentials: false, // 默认值
// `adapter` 允许自定义处理请求,这使得测试更容易。返回一个Promise并提供有效的响应。
adapter: function (config) {
/* ... */
},
/*
`auth` 表示应该使用 HTTP 基本身份验证,并提供凭据。
这将设置一个 `Authorization` 标头,覆盖您使用 `headers` 设置的任何现有的 `Authorization` 自定义标头。
请注意,只有 HTTP 基本身份验证可通过此参数进行配置。
对于不记名令牌等,请改用“Authorization”自定义标头。
*/
auth: {
username: 'janedoe',
password: 's00pers3cret'
},
/*
`responseType` 表示服务器将响应的数据类型,选项为:
'arraybuffer', 'document', 'json', 'text', 'stream'
仅限浏览器:'blob'
会对响应结果自动进行转换
*/
responseType: 'json', // 默认值
// `responseEncoding` 表示用于解码响应的编码(仅限 Node.js)
// 注意:忽略“stream”或客户端请求的 `responseType`
responseEncoding: 'utf8', // 默认值
// `xsrfCookieName` 是用作 xsrf 令牌值的 cookie 的名称
xsrfCookieName: 'XSRF-TOKEN', // 默认值
// `xsrfHeaderName` 是携带 xsrf 令牌值的 http 标头的名称
xsrfHeaderName: 'X-XSRF-TOKEN', // 默认值
// `onUploadProgress` 允许处理上传的进度事件
// 仅限浏览器
onUploadProgress: function (progressEvent) {
// 使用本机进度事件做任何您想做的事情
},
// `onDownloadProgress` 允许处理下载的进度事件
// 仅限浏览器
onDownloadProgress: function (progressEvent) {
// 使用本机进度事件做任何您想做的事情
},
// `maxContentLength` 定义了 node.js 中允许的 http 响应内容的最大大小(以字节为单位)
maxContentLength: 2000,
// `maxBodyLength`定义了允许的 http 请求内容的最大大小(以字节为单位)
// 仅限Node
maxBodyLength: 2000,
/*
`validateStatus` 定义是解析还是拒绝给定 HTTP 响应状态代码的承诺。
如果 `validateStatus` 返回 `true`(或设置为 `null` 或 `undefined`),
promise 将被解析;否则,承诺将被拒绝。
默认状态响应码在200到300是成功
*/
validateStatus: function (status) {
return status >= 200 && status < 300;
},
// `maxRedirects` 定义了 node.js 中最大的跳转次数(一个服务发送请求的时候做的跳转)。
// 如果设置为 0,则不会进行跳转。
maxRedirects: 5, // 默认值(最多跳转五次)
/*
`socketPath` 定义了一个在 node.js 中使用的 UNIX 套接字。
例如'varrundocker.sock' 向 docker 守护进程发送请求。
只能指定 `socketPath` 或 `proxy`其中一个。
如果两者都指定,则使用`socketPath`。
*/
socketPath: null, // 默认值
// `httpAgent` 和 `httpsAgent` 分别定义了在 node.js 中执行
// http 和 https 请求时要使用的自定义代理。这允许添加默认情况下未启用的选项,如“keepAlive”。
httpAgent: new http.Agent({ keepAlive: true }),
httpsAgent: new https.Agent({ keepAlive: true }),
/*
`proxy` 定义了代理服务器的主机名、端口和协议。
您还可以使用传统的 `http_proxy` 和 `https_proxy` 环境变量来定义您的代理。
如果您在代理配置中使用环境变量,您还可以将`no_proxy`环境变量定义为不应被代理的域的逗号分隔列表。
使用 `false` 禁用代理,忽略环境变量。
`auth` 表示应该使用 HTTP Basic auth 连接到代理,并提供凭据。
这将设置一个 `Proxy-Authorization` 标头,覆盖您使用 `headers`
设置的任何现有的 `Proxy-Authorization` 自定义标头。
如果代理服务器使用 HTTPS,那么您必须将协议设置为 `https`。
*/
proxy: {
protocol: 'https',
host: '127.0.0.1',
port: 9000,
auth: {
username: 'mikeymike',
password: 'rapunz3l'
}
},
// `cancelToken` 指定可用于取消请求的取消令牌
cancelToken: new CancelToken(function (cancel) {
}),
/* 例1:
const CancelToken = axios.CancelToken;
const source = CancelToken.source();
axios.get('/user/12345', {
cancelToken: source.token
}).catch(function (thrown) {
if (axios.isCancel(thrown)) {
console.log('Request canceled', thrown.message);
} else {
// 处理错误
}
});
axios.post('/user/12345', {
name: 'new name'
}, {
cancelToken: source.token
})
// 取消请求(message参数是可选的)
source.cancel('Operation canceled by the user.');
例2:
const CancelToken = axios.CancelToken;
let cancel;
axios.get('/user/12345', {
cancelToken: new CancelToken(function executor(c) {
// 一个执行器函数接收一个取消函数作为参数
cancel = c;
})
});
// 取消请求
cancel();
*/
/*
`decompress` 指示是否应自动解压缩响应正文。
如果设置为 `true` 也会从所有解压缩响应的响应对象中删除“内容编码”标头
- 仅限Node(XHR 无法关闭解压缩)
*/
decompress: true // 默认值
// 可能会在较新版本中删除的向后兼容性过渡选项
transitional: {
/*
无声 JSON 解析模式
`true` - 如果解析失败,则忽略 JSON 解析错误并将 response.data 设置为 null(旧行为)
`false` - 如果 JSON 解析失败,则抛出 SyntaxError(注意:responseType 必须设置为 'json')
*/
silentJSONParsing: true; // 当前 Axios 版本的默认值
// 尝试将响应字符串解析为 JSON,即使 `resposeType` 不是 'json'
forcedJSONParsing: true;
// 在请求超时时抛出 ETIMEDOUT 错误而不是通用的 ECONNABORTED
clarifyTimeoutError: false;
}
}