【问题标题】:Node Js/Expresss api call using information from client使用来自客户端的信息的 Node Js/Express api 调用
【发布时间】:2015-10-24 21:45:52
【问题描述】:

所以我正在编写一个 webapp 来从 steam api 获取信息,但我遇到了一些 cors 问题,所以我编写了一个 node/express 服务器来执行实际的 api 调用,然后客户端应用程序从我的服务器上获取 json .这是有效的,但前提是 api 调用在我的服务器上被硬编码。如何从客户端的“sid”表单字段中为服务器提供用户 ID?

服务器代码:

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

var app = express();  
function proxy(){
  app.use('/', function(req, res) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    var apiServerHost = "http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=[APIKEY]&steamids=";
    var userId = 76561197972495328;
    var url = apiServerHost+userId;
    req.pipe(request(url)).pipe(res);
  });
}

proxy();


app.listen(process.env.PORT || 3000); 

客户端代码:

function submit(){
    $(document).ready(function(){
        var sid = document.getElementById("idform").elements[0].value;
        $.getJSON("http://localhost:3000/", function(result){
            console.log(result);
            console.log(result.response.players[0]);
            for(i in result.response.players[0]){
                document.getElementById("main").appendChild(document.createTextNode(i + " : " + result.response.players[0][i]));
                document.getElementById("main").appendChild(document.createElement("br"));
            }
        });
    });
}

【问题讨论】:

  • $.getJSON 的第二个参数是您可以发送到服务器的数据,就像任何 ajax 调用一样。

标签: javascript node.js api express get


【解决方案1】:

试试这个:

服务器代码:

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

var app = express();  
function proxy(){
  app.use('/', function(req, res) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    var apiServerHost = "http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=[APIKEY]=";
    var userId = encodeURIComponent(req.query.sid);
    var url = apiServerHost+userId;
    req.pipe(request(url)).pipe(res);
  });
}

proxy();


app.listen(process.env.PORT || 3000); 

客户端代码:

function submit(){
    $(document).ready(function(){
        var sid = document.getElementById("idform").elements[0].value;
        $.getJSON("http://localhost:3000/?sid=" + encodeURIComponent(sid), function(result){
            console.log(result);
            console.log(result.response.players[0]);
            for(i in result.response.players[0]){
                document.getElementById("main").appendChild(document.createTextNode(i + " : " + result.response.players[0][i]));
                document.getElementById("main").appendChild(document.createElement("br"));
            }
        });
    });
}   

【讨论】:

  • 谢谢我用了你的一部分和其他答案的一部分
【解决方案2】:

$.getJSON 的第二个参数是您可以发送到服务器的数据,就像任何 ajax 调用一样。

var sid = document.getElementById("idform").elements[0].value;

$.getJSON("http://localhost:3000/", {sid: sid}, function(result){ ...

并在 Node 中捕获它

app.use('/', function(req, res) {
    var sid = req.query.sid || "";

    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");

    var qs  = "?key=[APIKEY]&steamids=" + sid;
    var url = "http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/" + qs;

    req.pipe(request(url)).pipe(res);
});

【讨论】:

  • 感谢这有效,但我必须使用 document.getElementById("idform").elements[0].value; 而不是 $("#idform").val();
  • 哦,好吧,idform 是一个表单,elements[0] 获取该表单中的第一个输入。我错过了那个,只是(错误地)改变了它。我会把它改回来,但$('#idform :input').first() 可能也可以。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-21
  • 2017-02-20
相关资源
最近更新 更多