无法使用Vue和Axios查询AWS API

时间:2018-10-16 23:42:46

标签: vue.js axios aws-api-gateway

几天来,我一直在尝试从AWS API获得响应。如果我使用Postman查询它,效果很好,但是当我使用vue和axios编写代码时,它根本不起作用。所以,这就是我在哪里,什么有效,什么无效。

我有一个简单的“ getCryptos”方法,该方法从coinmarketcap.com API获取当前市场价值。这是为了证明使用AWS以外的其他API可以正常工作。该方法如下:

async getCryptos() {
  await axios.get('https://api.coinmarketcap.com/v1/ticker/').then((resp) => {
    this.response = resp.data;
  }).catch((err) => {
    this.error = err.message;
  });
}

此方法很好用。调用时,代码转到 then 函数,并用收集的数据填充 this.response

现在,为了调用AWS API,我修改了代码以添加API密钥和GET查询的参数。下面的代码隐藏了确切的URL,API密钥和参数,但是您会明白的。我还在 then catch 中将呼叫添加到 debugger em> 函数来查看代码的去向。

async getAWS() {
  await axios.get('https://xxxxxxxxx.execute-api.us-west-2.amazonaws.com/development/api', {
    headers: { 'x-api-key': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' },
    params: {
      Param: 'Value',
    },
  })
    .then((resp) => {
      this.response = resp.data;
      debugger;
    }).catch((err) => {
      this.error = err.message;
      debugger;
    });
},

结果是代码通过 catch 函数,错误为Network error,无论含义如何。

在Postman中使用相同的API密钥标头和相同的参数进行相同的精确查询就可以了。

所以,我的问题是,我做错了什么?为什么我可以调用coinmarketcap API但不能调用我拥有的AWS API?我知道它不是AWS API,而且我知道axios可以进行CORS调用,因为它可以与coinmarketcap一起使用。我想念什么?

2 个答案:

答案 0 :(得分:0)

您需要在AWS中允许API网关服务的CORS请求。

转到您的AWS控制台,转到API网关控制台,选择您的资源。有一个actions下拉框,其中有一个Enable CORS选项。

更多信息here

答案 1 :(得分:0)

我正在使用vue js,axios和aws apigateway处理同样的错误。我可以通过删除axios调用中的标头,启用cors并重新部署api来使其工作。希望它对您有用。