You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Axios调用Xero API时查询参数未生效的问题排查

问题:Axios请求Xero API时查询参数未生效

根据Xero API的发票查询规则,发票查询支持Statuses、page、summaryOnly等参数,ModifiedAfter需通过If-Modified-Since请求头传递。我编写的Axios请求代码如下:

const params = {
  'Statuses': 'AUTHORISED,PAID',
  'page': 1,
  'summaryOnly': false,
}
const config = {
  headers: { 'If-Modified-Since': '2015-01-01T00:00:00' }
}
instance.interceptors.request.use(request => {
  console.log('Starting Request', request)
  return request;
});
const response = await instance.get('Invoices', params, config);
const data = response.data;

但请求日志显示参数未被正确解析到请求URL中,日志内容如下:

{
  transitional: {
    silentJSONParsing: true,
    forcedJSONParsing: true,
    clarifyTimeoutError: false
  },
  ...
  headers: AxiosHeaders {
    Authorization: 'Bearer eyJhbGciOiJSUzI1NiIsImtpZC...',
    [Symbol(defaults)]: { Accept: 'application/json, text/plain, */*' }
  },
  baseURL: 'https://api.xero.com/api.xro/2.0/',
  Statuses: 'AUTHORISED,PAID',
  page: 1,
  summaryOnly: false,
  method: 'get',
  url: 'Invoices'
}

请问哪里操作错误,导致这些查询参数未生效?


问题原因与修正方案

错误原因

Axios的get方法参数格式用错了。Axios的get方法签名是get(url[, config]),第二个参数是配置对象,没有单独的params参数位置。你把params作为第二个参数传入,导致它被当成了配置的顶层属性,而不是URL查询参数的配置项,所以Axios不会把它解析到URL里。

修正后的代码

把params合并到config对象的params属性中即可:

const config = {
  params: {
    'Statuses': 'AUTHORISED,PAID',
    'page': 1,
    'summaryOnly': false,
  },
  headers: { 'If-Modified-Since': '2015-01-01T00:00:00' }
}
instance.interceptors.request.use(request => {
  console.log('Starting Request', request)
  return request;
});
const response = await instance.get('Invoices', config);
const data = response.data;

这样Axios会自动把params里的键值对解析成URL查询参数,拼接到请求URL后,最终的请求URL会变成类似https://api.xero.com/api.xro/2.0/Invoices?Statuses=AUTHORISED%2CPAID&page=1&summaryOnly=false的格式,参数就能正常生效了。


内容的提问来源于stack exchange,提问作者eozzy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 01:46:47