网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
import ky from ‘ky’;
// On https://example.com
const response = await ky(‘unicorn’, {prefixUrl: ‘/api’});
//=> ‘https://example.com/api/unicorn’const response2 = await ky(‘unicorn’, {prefixUrl: ‘https://cats.com’});
//=> ‘https://cats.com/unicorn’
在前缀URL和输入连接后,将根据页面的URL(如果有)解析结果。
当使用此选项来加强一致性并避免混淆如何处理输入URL时,不允许使用输入中的前导斜杠,因为在使用前缀URL时,输入不会遵循正常的URL解析规则,这会改变前导斜杠的含义。
5.1.6retry
Type: object | number
Default:
limit
:2
methods
:get
put
head
delete
options
trace
statusCodes
: 408 413 429 500 502 503 504maxRetryAfter
:undefined
延迟重试的计算方法是使用:retry的次数是从1开始计算,层次从1开始计算
0.3 * (2 ** (retry - 1)) * 1000
重试不会触发使用一个timeout
import ky from 'ky'; const json = await ky('https://example.com', { retry: { limit: 10, methods: ['get'], statusCodes: [413] } }).json();
5.1.7timeout
Type: number | false
Default: 10000
如果设置false,将不会使用timeout。timeout是毫秒级别的单位,设置为毫秒级。但是最大不能超过2147483647。
5.1.8hooks
Type: object<string, Function[]>
Default: {beforeRequest: [], beforeRetry: [], afterResponse: []}
在request整个生命周期里面,hooks允许任意的修改。hooks函数是连续的,异步的。
Type: Function[]
Default: []
- hooks.beforeRequest 接受request options?
import ky from 'ky'; const api = ky.extend({ hooks: { beforeRequest: [ request => { request.headers.set('X-Requested-With', 'ky'); } ] } }); const response = await api.get('https://example.com/api/users');
1.hooks.beforeRetry
import ky from ‘ky’;
const response = await ky(‘https://example.com’, {
hooks: {
beforeRetry: [
async ({request, options, error, retryCount}) => {
const token = await ky(‘https://example.com/refresh-token’);
request.headers.set(‘Authorization’,token ${token}
);
}
]
}
});
2.hooks.beforeError
import ky from ‘ky’;
await ky(‘https://example.com’, {
hooks: {
beforeError: [
error => {
const {response} = error;
if (response && response.body) {
error.name = ‘GitHubError’;
error.message =${response.body.message} (${response.status})
;
}return error;
}
]
}
});
3. hooks.afterResponse
import ky from ‘ky’;
const response = await ky(‘https://example.com’, {
hooks: {
afterResponse: [
(_request, _options, response) => {
// You could do something with the response, for example, logging.
log(response);// Or return a
Response
instance to overwrite the response.
return new Response(‘A different response’, {status: 200});
},// Or retry with a fresh token on a 403 error
async (request, options, response) => {
if (response.status === 403) {
// Get a fresh token
const token = await ky(‘https://example.com/token’).text();// Retry with the token
request.headers.set(‘Authorization’,token ${token}
);return ky(request);
}
}
]
}
});
5.1.9 ky.extend(defaultOptions)
生成一个传入option对象的重写默认值新的ky实例,相比之下 in contrast,
import ky from ‘ky’;
const url = ‘https://sindresorhus.com’;
const original = ky.create({
headers: {
rainbow: ‘rainbow’,
unicorn: ‘unicorn’
}
});const extended = original.extend({
headers: {
rainbow: undefined
}
});const response = await extended(url).json();
console.log(‘rainbow’ in response);
//=> falseconsole.log(‘unicorn’ in response);
//=> true
5.1.10ky.create(defaultOptions)
Create a new Ky instance with complete new defaults.
生成一个带有全部默认配置的新的ky实例。
import ky from ‘ky’;
// On https://my-site.com
const api = ky.create({prefixUrl: ‘https://example.com/api’});
const response = await api.get(‘users/123’);
//=> ‘https://example.com/api/users/123’const response = await api.get(‘/status’, {prefixUrl: ‘’});
//=> ‘https://my-site.com/status’
5.1.11Cancellation 取消请求
Fetch (and hence Ky) has built-in support for request cancellation through the AbortController API. Read more.
for example:
import ky from ‘ky’;
const controller = new AbortController();
const {signal} = controller;setTimeout(() => {
controller.abort();
}, 5000);try {
console.log(await ky(url, {signal}).text());
} catch (error) {
if (error.name === ‘AbortError’) {
console.log(‘Fetch aborted’);
} else {
console.error(‘Fetch error:’, error);
}
}
FAQ find answer and question
1.怎么在nodejs里面使用ky?
Check out ky-universal.
可以使用ky-universal,地址如下
ky-universalhttps://github.com/sindresorhus/ky-universal#faq2.怎么在没有打包工具的情况下使用ky,比如没有webpack?
Make sure your code is running as a JavaScript module (ESM), for example by using a
<script type="module">
tag in your HTML document. Then Ky can be imported directly by that module without a bundler or other tools.的代码需
首先你的代码需要运行在ESM下面,举个例子:使用
<script type="module">的标签
在你的html文档里面。然后这个ky可以在没有打包工具或者其他工具情况下直接导入。
3.ky与axios直接有什么区别?
6.完整的封装
6.1request.ts
import ky from ‘ky’;
import { requestCode } from ‘./requestCode’;
import message from ‘…/components/message’
const api = ky.create({
prefixUrl: ‘/’,
headers: {
‘content-type’: ‘application/json’,
},
hooks: {
beforeRequest: [
request => {
request.headers.set(‘X-Requested-With’, ‘ky’);
}
],
afterResponse: [
(_request, _options, response) => {
if (response.status !== 200) {
console.log(response.status)
// TODO 提示错误信息
console.log(response, ‘response’);
console.log(requestCode, ‘requestCode’)
}
return response;
},
],
beforeError: [
(error: any) => {
const { response } = error;
console.log(response)
const { status } = response;
message.warning(requestCode[status])
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
console.log(response)
const { status } = response;
message.warning(requestCode[status])
[外链图片转存中…(img-GYB6vqNB-1715611908526)]
[外链图片转存中…(img-JMPhBXOf-1715611908526)]
[外链图片转存中…(img-EhtI6621-1715611908526)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新