Javascript 使用es6类扩展Axios
我对创建API包装器和使用es6类从axios扩展很感兴趣。这怎么可能?Axios有一个方法.create(),可用于生成新的Axios对象Javascript 使用es6类扩展Axios,javascript,axios,es6-class,Javascript,Axios,Es6 Class,我对创建API包装器和使用es6类从axios扩展很感兴趣。这怎么可能?Axios有一个方法.create(),可用于生成新的Axios对象 class Api extends Axios { constructor(...args){ super(..args) this.defaults.baseURL = 'https://api.com' } cancelOrder (id) { return this.put(`/cancel/order/${id}
class Api extends Axios {
constructor(...args){
super(..args)
this.defaults.baseURL = 'https://api.com'
}
cancelOrder (id) {
return this.put(`/cancel/order/${id}`)
}
}
我知道我有权访问此let instance=axios.create()
有什么想法吗
尝试1
import axios from 'axios'
const Axios = axios.create()
class Api extends Axios {
constructor (...args) {
super(...args)
this.defaults.baseURL = 'https://api.com'
}
cancelOrder (id) {
return this.put(`/cancel/order/${id}`)
}
}
let api = new Api()
api.cancelOrder('hi')
.then(console.log)
.catch(console.log)
尝试2
import axios from 'axios'
class Axios {
constructor () {
return axios.create()
}
}
class Api extends Axios {
constructor () {
super()
this.defaults.baseURL = 'https://api.com'
}
cancelOrder (id) {
return this.put(`/cancel/order/${id}`)
}
}
let api = new Api()
console.log(api.__proto__)
api.cancelOrder('hi')
.then(console.log)
.catch(console.log)
如果你看一下,它们似乎没有公开Axios的“类”,只有一个实例
// Factory for creating new instances
axios.create = function create(defaultConfig) {
return new Axios(defaultConfig);
};
我不相信实例对象可以在es6中扩展
您的第二次尝试似乎是最可行的,但是如果您想模拟每一个
axios
方法,您可能会有很多开销。axios
当前没有导出它内部使用的axios
对象
.create()
方法仅实例化一个新实例
// Factory for creating new instances
axios.create = function create(defaultConfig) {
return new Axios(defaultConfig);
};
我创建了一个pr,用于导出Axios
类
还有一个github问题:
您可以安装此软件包:
npm i axios-es6-class
我还想创建一个类,该类允许我创建具有预定义默认值的多个实例。这是我的解决办法
import axios from 'axios'
export class Axios {
constructor() {
return axios.create({
baseURL: 'http://127.0.0.1:8080/',
headers: {
Authorization: 'AUTH TOKEN FROM INSTANCE',
'Content-Type': 'application/json',
},
})
}
}
我不确定这里的问题是什么?@Tuvia问题是我试图扩展Axios,但我不能:(你不能在es6中扩展
对象。但是你可以扩展原型。但我不完全确定你想做什么。类(由es6定义)这是你必须做的new MyClass
的事情。而MyClass
是你可以扩展的东西,因此类
阻抗失配开始。这将需要几十年的时间才能解决。这是非常恼人的,Axios
无法扩展。我想扩展它,并添加一些我经常使用的通用方法e、 我想保留所有原始的axios方法,并将其全部放在我称之为“http”而不是“axios”的同一个实例上,但不幸的是,这种扩展似乎是不可能的,因为库开发人员认为他们知道得更好,所以他们不会让我们这样做。Facepalm。我想我有点困惑。create()
/a甚至实现了“创建新实例的工厂”,以及为什么没有导出对Axios的访问。我不知道。只需查看代码的详细信息。如果您想公开实际的Axios
“类”,您可以随时为guys项目提供叉子,并为此提供PR(同时使用叉子)好了。你有答案了@ThomasReggi:-)模块axios没有导出的成员“axios”。你使用的是哪个axios版本?“axios”:“0.21.0”
import axios, { Axios } from 'axios';
class Api extends Axios {
constructor () {
super()
this.defaults.baseURL = 'https://api.com'
}
cancelOrder (id) {
return this.put(`/cancel/order/${id}`)
}
}