我希望从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="➜" onclick="getValue()" id="rekt"></a>
</form>
答案 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);
如果您不想使用查询参数,可以使用以下内容:
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的查询字符串值的对象
如果您像我上面那样突破了您的appid
和key
,则可以将其传递给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