node.js - ReactJS 使用 POST 和 GET 发出跨域请求失败,代码为 405

标签 node.js reactjs rest cross-domain

我正在尝试向 skyscanner 发出 cros 请求并获取一些信息。我研究过他们的doc这就是我需要做的:

  1. 使用 POST 请求创建 session ,
  2. 然后获取响应 header ,
  3. 然后使用该网址发出 GET 请求,
  4. 获取航类数据。

所以基本上有 2 个 API 调用。

这是我的代码:

export function getFlights() {

    const request = axios.post(
        'http://partners.api.skyscanner.net/apiservices/pricing/v1.0/',  
        JSON.stringify({
            "cabinclass": "Economy",
            "country": "UK",
            "currency": "GBP",
            .
            .
            .
            .
            "apikey": "apikey"
        }), 
        {   
            headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
        })
        .then(function (response) {
            console.log(response.headers);
            axios.get(response.headers.location + '?apiKey=apikey&stops=0&duration=360&includeCarriers=ba;u2;af').then(function(response) {
                console.log(response)
            })
        })
        .catch(function (error) {
            console.log(error);
        });
    return {
        type: GET_FLIGHT, 
        payload: request
    };
}

因此我删除了一些查询参数并隐藏了 api key 。

我已经下载了 chrome 的 allow-control-allow-origin 扩展,并且我还更改了主机文件:C:\Windows\System32\drivers\etc\hosts,所以现在我通过测试域访问我的应用程序:http://testdomain.com:3000/

但是当我尝试获取结果时,出现以下错误:

POST http://partners.api.skyscanner.net/apiservices/pricing/v1.0/ 405 (Method Not Allowed)

当我进入NETWORK TAB并选择XHR时,我看到v1.0/partners.api.skyscanner.net/apiservices/pricing,它是红色的,在标题下我可以看到:

General Response Headers Request Headers Form Data, which has (seems like) a flight with my parameters??

我不确定我做错了什么,但从文档和其他所有内容来看,我应该得到代码 200,这是成功的结果,但我不断得到 405。有人可以向我解释我做错了什么吗?

最佳答案

加载 querystring 库后试试这个:

var querystring = require('querystring');

var data = {
    cabinclass: 'Economy',
    country: 'UK',
    currency: 'GBP',
    // ...
    apikey: 'apikey' // be sure your API key is correct
};

var authOptions = {
    method: 'POST',
    url: 'http://partners.api.skyscanner.net/apiservices/pricing/v1.0',
    data: querystring.stringify(data),
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
    },
    json: true
};

axios(authOptions)
    .then(function(response){
        console.log(response.data);
        console.log(response.status);

        axios.get(response.headers.location + '?apiKey=apikey&stops=0&duration=360&includeCarriers=ba;u2;af').then(function(response) {
            console.log(response);
        });
    })
    .catch(function(error){
      console.log(error);
    });

根据doc ,尝试使用 http://partners.api.skyscanner.net/apiservices/pricing/v1.0 而不是 http://partners.api.skyscanner.net/apiservices/pricing/v1.0/(不带 /)。

关于node.js - ReactJS 使用 POST 和 GET 发出跨域请求失败,代码为 405,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48607228/

相关文章:

javascript - Node.js + 请求 - 保存远程文件并在响应中提供它

node.js - 每天在特定时间在javascript中触发一个函数

java - Jersey 消耗二维数组

arrays - 在 Node js中缓存对象数组

node.js - aws-sdk S3 : best way to list all keys with listObjectsV2

node.js - Steam NodeJS 仅接受具有 X 个 appID 项目的交易

javascript - 从 React 类修改 React 元素

javascript - 如何将数据从 vanilla JavaScript 传递到 React 功能组件

java - Coinbase API 测试买卖 API

RestTemplate:返回实体列表