2016-03-31 4 views
1

Ich habe eine Situation, in der, um Bilder für eine Website, die ich erstelle, ich eine HTTP-Anfrage an einen externen Server für Informationen zu machen. Momentan gibt es zwei Antworten auf die Anfragen: XML und Bilder. Ich mache das mit Node.js.Wie Bild von HTTP-Anfrage zu externen API mit Node.js

Für die XML, ich bin in der Lage, es ohne Probleme zu analysieren und es kann in eine Variable übergeben und behandelt werden wie alles andere. Mit den Bildern stecke ich fest, ich habe keine Ahnung, wie man sie auf der Seite "angezeigt" bekommt, nachdem ich sie angefordert habe. Am weitesten habe ich es geschafft, die Anfrage im Postboten korrekt zu stellen. Meine Frage ist, kann ich das Bild aus dem Körper der Antwort der Anfrage, die ich mache, auf einen anderen Server ziehen und es in der Web-App anzeigen lassen, die ich erstelle?

Ich bin sehr neu in der Backend-Welt und versuche zu lernen, wie ich gehe. Dies ist ein Beispiel dessen, was ich in der Lage gewesen und zum Parsen einer XML-Antwort verwenden, um finde, dass ich von der API erhalten

var request = require("request"); 
var express = require("express"); 
var jsxml = require("node-jsxml"); 
var app = express(); 
var fs = require("fs"); 

app.get('/users', function(req,res) { 
console.log("List of users requested."); 
// We will grab the list of users from the specified site, but first we have to grab the site id 
// (Same idea as when we added users. We could have checked if req.session.SiteID has been populated, 
// but I chose to keep it simple instead) 
request(
    { 
     url: 'http://' + SERVERURL + '/api/2.0/sites/' + SITE + '?key=name', 
     headers: { 
      'Content-Type': 'text/xml', 
      'X-Tableau-Auth': req.session.authToken 
     } 
    }, 
    function(err, response, body) { 
     if(err) { 
      req.session.err = err; 
      res.redirect('/'); 
     } else { 
      var bodyXML = new jsxml.XML(body); 

      console.log("site id: " + siteID); 
     } 
     // OK. We have the site, now let's grab the list of users 
     // Since we're just making a GET request, we don't need to build the xml. All the is needed 
     // is the SiteID which is inserted in the url and the auth token which is included in the headers 
     request(
      { 
       url: 'http://' + SERVERURL + '/api/2.0/sites/' + siteID + '/users/', 
       headers: { 
        'Content-Type': 'text/xml', 
        'X-Tableau-Auth': authToken 
       } 
      }, 
      function(err, response, body) { 
       if(err) { 
        req.session.err = err; 
       } else { 
        // A succesful request returns xml with a <users> which contains multiple <user> elements. 
        // The <user> elements have name attributes and id attributes which we'll grab, store in a 
        // javascript object and render those in the html that loads. 
        var bodyXML = new jsxml.XML(body); 
        bodyXML.descendants('user').each(function(item, index) { 
         userIDs[item.attribute('name').getValue()] = item.attribute('id').getValue(); 
        }); 
        for(var user in userIDs) { 
         console.log(user + " " + userIDs[user]); 
        } 
       } 
       res.render("users.ejs", { 
        err: req.session.err, 
        userIDs: userIDs, 
        site: SITE 
       }); 
      } 
     ); 
    } 
); 
}); 

Jede Hilfe enorm geschätzt werden würde. Vielen Dank!

Antwort

1

Schritt 1: Bild abrufen und auf dem Knotenserver speichern. request module documentation on streaming for more options

request('http://google.com/doodle.png').pipe(fs.createWriteStream('doodle.png')); 

Schritt 2: das gespeicherte Bild als Antwort senden.

+0

Das macht Sinn, glaube ich. Auch hier bin ich neu. Ich weiß mit Textvariablen, dass ich sie definieren kann, nachdem ich eine Seite angefordert habe, um sie an die Clientseite weiterzuleiten. Wie sieht die Anfrage für dieses Bild auf der HTML-Seite aus? Ist es ein einfaches Tag? –

+0

Ja, es ist ein einfaches Tag. Sie können ein Bild aufnehmen und auf der Quellseite nachsehen. –