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

问题描述 投票:0回答:2
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 在最后附加,即使在查询变量之后?

javascript node.js axios backend trello
2个回答
0
投票

不幸的是,您正在尝试获取无效的网址:

# invalid:
https://api.trello.com/1?key=key&token=token/members/[email protected]

# valid:
https://api.trello.com/1/members/[email protected]?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: this.baseParams,
    });
    return userDetails;
  }
}

0
投票

我认为问题是因为 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,
  }
});
© www.soinside.com 2019 - 2024. All rights reserved.