在nodejs

时间:2016-01-13 11:51:08

标签: javascript node.js express

我希望从steam api获取数据。这就是我的server.js的样子。

我从req.query那里得到了steamID。然后我希望它们作为url字符串的最后一部分传递给函数。

到目前为止,我已经测试了以下内容:将密钥直接强制转移到var url并删除了该功能。它奏效了。

我尝试在var rekt之后创建req.query,并将其传递为getData(rekt)。它没用。

所以我认为调用该函数不起作用,因为在节点js中存在不同的语法(因为我是新的。)希望它是足够的信息。

var request = require('request');
var express = require('express');
var app = express();
var gotSteamID;

app.use(express.static('site'));

app.get('/data.html', function(req, res){ 
    gotSteamID = req.query.SteamID;
    getData(gotSteamID);
}); 

function getData(gotSteamID) {
    app.get('/steam/stats', function(httpRequest, httpResponse) {
        var url = 'http://api.steampowered.com/ISteamUserStats/GetUserStatsForGame/v0002/?appid=730&key=IREMOVEDTHEKEY&steamid=' + gotSteamID;
        request.get(url, function(error, steamHttpResponse, steamHttpBody) {
            httpResponse.setHeader('Content-Type', 'application/json');
            httpResponse.send(steamHttpBody);
        });
    });
}

var port = 4000;
var server = app.listen(port);

并且html帖子看起来像

<form class="form" action="data.html" method="GET">
                <input type="text" name="SteamID" placeholder="76561198101455802" id="steamIDvalue" name="selectpicker" required>
                <a href="data.html"><input type="submit" name="submit" value="&#10140" onclick="getValue()" id="rekt"></a>
                </form>

2 个答案:

答案 0 :(得分:0)

最终,您似乎正在尝试在/data.html的请求处理程序中设置另一个端点(通过app.get())。删除后,现在将调用request.get()

使用查询参数

以下内容应允许您向/data发出GET请求。我删除了.html,因为您实际上是从此端点提供JSON(您需要在表单中更改此内容)

var request = require('request');
var express = require('express');
var app = express();

app.use(express.static('site'));

var appid = 730;
var key = 'IREMOVEDTHEKEY';
var api = 'http://api.steampowered.com/ISteamUserStats/GetUserStatsForGame/v0002/';

app.get('/data', function(req, res){ 
  var steamId = req.query.SteamID;
  var url = api + '?appid='+ appid +'&key='+ key +'&steamid=' + steamId;
  request.get(url, function(error, response, body) {
      res.setHeader('Content-Type', 'application/json');
      res.send(body);
  });
}); 

app.listen(4000);

使用URL参数

如果您不想使用查询参数,可以使用以下内容:

app.get('/steam/stats/:steamId', function(req, res){ 
  var steamId = req.params.steamId;
  var url = api + '?appid='+ appid +'&key='+ key +'&steamid=' + steamId;
  request.get(url, function(error, response, body) {
      res.setHeader('Content-Type', 'application/json');
      res.send(body);
  });
}); 

清理您的请求

字符串连接很好,但request提供了一种更方便(更容易阅读/维护)的方式来创建API URL。

  

qs - 包含要附加到uri的查询字符串值的对象

如果您像我上面那样突破了您的appidkey,则可以将其传递给qs,而无需担心?&网址管理。< / p>

request.get({
  url: api,
  qs: {
    appid: appid,
    key: key,
    steamid: req.params.steamId
  }
});

只是一个友好的小工具,可以帮助整理您的代码,让您免受一些潜在的挫折感。

答案 1 :(得分:0)

为什么不公开在参数中获取ID的1个API调用,而不是2个app.get(函数内部的一个)?

app.get('/steam/stats/:id', function(httpRequest, httpResponse) {
    var url = 'http://api.steampowered.com/ISteamUserStats/GetUserStatsForGame/v0002/?appid=730&key=IREMOVEDTHEKEY&steamid=' + id;
    request.get(url, function(error, steamHttpResponse, steamHttpBody) {
        httpResponse.json(steamHttpBody);
    });
});

然后在html中,您需要调用/ steam / stats / id而不是/data.html?SteamId=xxx