无法使用axios实例进行api调用


export class TrelloService {
public instance: AxiosInstance;
constructor(token: string) {
this.instance = axios.create({
baseURL: `https://api.trello.com/1?key=${process.env.TRELLO_API_KEY}&token=${token}`,
});
}
public async getUserDetails(email: string): Promise<any> {
const userDetails = await this.instance.get(`/members/${email}`);
return userDetails;
}

public static async getUserDetails2(
email: string,
token: string,
throwError = false,
): Promise<any> {
let userDetails: any = null;
const userDetails = await axios.get(`https://api.trello.com/1/members/${email}key=${process.env.TRELLO_API_KEY}&token=${token}`)
return userDetails;
}
}

如果我通过创建类TrelloService的对象调用getUserDetails,它不工作。Trello它抛出了一个状态代码404的错误。但如果我直接调用getUserDetails2方法,它工作得很好。这是对象创建部分

const trelloService = new TrelloService(accessToken);
const temp = await trelloService.getUserDetails(email);

我试图操纵axios实例,但它没有为我工作。这是因为url在最后附加,甚至在查询变量之后?

我认为这个问题是因为axios将字符串合并在一起

你必须使用参数选项

改变这一行

this.instance = axios.create({
baseURL: `https://api.trello.com/1?key=${process.env.TRELLO_API_KEY}&token=${token}`,
});

this.instance = axios.create({
baseURL: `https://api.trello.com/1`,
params: {
key: process.env.TRELLO_API_KEY,
token: token,
}
});

不幸的是,您正在尝试获得一个无效的url:

# invalid:
https://api.trello.com/1?key=key&token=token/members/john@doe.io
# valid:
https://api.trello.com/1/members/john@doe.io?key=key&token=token

尝试在每个请求中添加参数:

export class TrelloService {
public instance: AxiosInstance;
public baseParams: { key: string; token: string };
constructor(token: string) {
this.instance = axios.create({
baseURL: `https://api.trello.com/1`,
});
this.baseParams = {
key: process.env.TRELLO_API_KEY,
token,
};
}
public async getUserDetails(email: string): Promise<any> {
const userDetails = await this.instance.get(`/members/${email}`, {
params: { otherParam: "1", ...this.baseParams },
});
return userDetails;
}
}

您还可以使用interceptor为每个请求添加参数

最新更新