如果您在JavaScript中使用了HTTP请求,则可能听说过Axios。他是一个非常受欢迎的图书馆,可以在JavaScript中提出HTTP要求,但这是可选的?
在这篇文章中,我将提供更简单,更有效的替代方案,以在JavaScript中提出HTTP请求。最重要的是:不需要外部库!
以下方式是如何创建抽象以简单而直接地制作HTTP请求的示例:
import to from './to'
export default new Proxy({}, {
get (_, method) {
return function (url) {
const init = {
method
}
return {
blob () {
return to(
fetch(url, init).then(response => response.blob())
)
},
body (body) {
Object.assign(init, {
body: JSON.stringify(body)
})
return this
},
cache (cache) {
Object.assign(init, { cache })
return this
},
headers (headers) {
Object.assign(init, {
headers: new Headers(headers)
})
return this
},
json () {
return to(
fetch(url, init).then(response => response.json())
)
},
mode (mode) {
Object.assign(init, { mode })
return this
},
signal (signal) {
Object.assign(init, { signal })
return this
},
text () {
return to(
fetch(url, init).then(response => response.text())
)
}
}
}
}
})
以这种方式创建一个具有代理的对象,该对象拦截了属性的所有调用,并且所有物体中不存在的所有调用。因此,我们可以将财产或母亲称为©任何,该财产将被解释为fetch对象的母亲。
母亲©All to
是一个涉及承诺的函数,添加了错误处理,该函数返回带有错误和承诺结果的数组。这使我们能够使用等待的人更简单地对待承诺的反应。
export default (promise) =>
promise
.then(data => [null, data])
.catch(error => [error, null])
每次在对象上调用属性时,整个get
都会调用。他收到参数,即访问该属性的名称,并返回该属性时将执行的函数。此函数为fetch
创建一个初始化对象,然后定义Mother Vania所有在此对象中添加属性的人,例如Blob,该对象执行请求并返回BLOB格式的承诺,而json
则执行请求并返回一个承诺以JSON格式遏制。
要更好地了解如何使用此代码,让我们看看一个使用的示例:
import http from './http'
async function getTodoList() {
const response = await http.get('https://jsonplaceholder.typicode.com/todos')
.cache('no-store')
.headers({
'Content-Type': 'application/json'
})
.json()
return response
}
在此示例中,我们正在使用创建的抽象来执行HTTP请求。首先,我们称为将URL作为参数传递的HTTP对象get
。然后,我们链接其他母亲©所有需要添加配置的人,例如cache
,cache
添加了缓存配置â£o,headers
,headers
,添加了一个头。等等。
尝试一下,看看在JavaScript中执行HTTP请求的简单!