Steam API访问控制允许原因问题

时间:2016-03-08 07:54:09

标签: javascript node.js web xmlhttprequest steam-web-api

网络编程有点新鲜,对此有点困惑。我有一个基本的express node.js webserver服务于一个网站。我想将一个gameid交给一个函数,让它使用他们的web api从steam获取成就信息,应该使用以下REST API调用来支持:

https://developer.valvesoftware.com/wiki/Steam_Web_API#GetGlobalAchievementPercentagesForApp_.28v0002.29

我有一个正在提供的脚本文件我正在尝试在客户端文件中执行请求。

function GetSteamGameAchievements(appid)
{
   var request = new XMLHttpRequest();

    request.addEventListener('load',function(){

       console.log(JSON.stringify(this.responseText));

    });

    request.open("GET","http://api.steampowered.com/ISteamUserStats/GetGlobalAchievementPercentagesForApp/v0002/?gameid="+ appid + "&format=json",true);

    request.send(null);
}

我收到以下错误

  

XMLHttpRequest无法加载   http://api.steampowered.com/ISteamUserStats/GetGlobalAchievementPercentagesForApp/v0002/?gameid=440&format=json。   请求中不存在“Access-Control-Allow-Origin”标头   资源。因此不允许来源“http://localhost:3000”   访问。

我已经阅读了一些关于错误的内容,但似乎需要更改服务器端代码。虽然所有服务器端代码都做了类似的事情:

// Add headers
app.use(function (req, res, next) {

  // Website you wish to allow to connect
  res.setHeader('Access-Control-Allow-Origin', 'http://api.steampowered.com');

  // Request methods you wish to allow
  res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');

  // Request headers you wish to allow
  res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');

  // Set to true if you need the website to include cookies in the requests sent
  // to the API (e.g. in case you use sessions)
  res.setHeader('Access-Control-Allow-Credentials', true);

  // Pass to next layer of middleware
  next();
});

使用Open Weather API是唯一的其他第三方REST api,我使用了类似原始代码的东西,所以我不确定为什么Steam API无法正常工作。使用Postman我提交的查询字符串很好,但是当我在我的客户端javascript中执行它时,证券有问题...但不是Open Weather API ...我不确定为什么它适用于一个但不是另一个。任何帮助都会非常感激,我已经过了一些类似的线索,但我认为我的愚蠢使我很难理解我哪里出错了以及需要在哪里进行修复。

2 个答案:

答案 0 :(得分:3)

  

我已经阅读了一些有关错误的内容,但它似乎需要更改服务器端代码或其他内容。

是 - 您希望从>中读取数据的服务。即通过Steam。

您无法使用访问者的身份从其他人的网站上读取数据。浏览器。

由于您无法更改Steam服务器,因此您需要使用服务器而不是来自访客的服务器从Steam获取数据。浏览器。

答案 1 :(得分:-2)

您可以轻松地'cors'模块。 使用此命令

npm install cors --save.

并在app.js中添加这些行

var cors = require('cors');    
app.use(cors());

你不需要弄脏你的代码。这是一种更清洁的方式。

删除此

app.use(function (req, res, next) {

  // Website you wish to allow to connect
  res.setHeader('Access-Control-Allow-Origin', 'http://api.steampowered.com');

  // Request methods you wish to allow
  res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');

  // Request headers you wish to allow
  res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');

  // Set to true if you need the website to include cookies in the requests sent
  // to the API (e.g. in case you use sessions)
  res.setHeader('Access-Control-Allow-Credentials', true);

  // Pass to next layer of middleware
  next();
});