2016-06-02 5 views
0

Ich habe einen Server-Side-Code eingerichtet, um eine Anfrage an eine externe Website zu stellen und ein JSON-Objekt zurückzugeben, das dann an die Clientseite meiner node.js übergeben wird/Express-Anwendung. Ich beabsichtige dann, auf dem Client eine zusätzliche Verarbeitung auf dem JSON durchzuführen.AJAX Request zum Lesen eines JSON-Objekts von node.js/express server

In meiner index.js Datei Ich habe den folgenden Code definiert meiner Sicht und machen einen RESTful Aufruf der externen Website zu machen:

var express = require('express'); 
var router = express.Router(); 
var request = require('request'); 

// Urls for external server REST API function calls 
var url = 'https://someserver.com/appserver/portal/api/1.0/results/recent'; 

/* GET list of recent reports */ 
router.get('/testapi', function(req, res, next) { 
    res.render('testapi', { title: 'List Recent Reports' }); 
}); 

/* TEST: function to GET report list */ 
router.get('/recentreports', function(req, res){ 
    request({ 
    url: url, 
    json: true 
    }, function (error, response, body) { 
     if (!error && response.statusCode === 200) { 
     res.send(body); // Send the response to the client 
    } else { 
     console.log(error); 
    } 
    }) 
}); 


module.exports = router; 

In meinem Jade Ansicht habe ich eine Schaltfläche einrichten machen Rufen Sie die Funktion/recentreports auf und stellen Sie eine Anforderung (möglicherweise AJAX-Anforderung?), um das JSON-Objekt vom Server zu empfangen.

Meine Frage ist: Wie lese ich die Antwort vom Server in meine Client-Seite Anwendung, so dass ich den JSON verarbeiten kann?

Meine Jade Ansicht ist wie folgt:

extends layout 

head 

block content 
    h1= title 
    p Welcome to #{title} 
    script. 
    // not sure what goes here 
    $(function()){ 
     $('#getRecentReports').on('', function() { 
      $.get('recentreports', function(body) { 
      $('#jsonbody').html(body) 
      }) 
     }) 
    } 

    button(
    onclick = "getRecentReports()" 
) 

Edit: aktualisiert .jade Code, nachdem sie mit ihm spielen um ein bisschen mehr

+1

Randbemerkung: auf dem Server, Sie konnten nicht nur verwendet 'Anfrage ({url: url, json: true}) Rohr (. res) '? –

+0

Ich nehme an, könnte so, dann sieht mein serverseitiger Code wie folgt aus: ... router.get ('/ recentreports', Funktion (req, res) { Anfrage ({url: url, json: true}) .pipe (res) }); ... Wenn ich diese Änderung mache, wie wirkt sich das auf meine Methode aus, um die Antwort einzulesen? – Sledge

+1

Es sollte es nicht ändern, deshalb habe ich es als Randnotiz angeboten. Es ist einfach einfacher, das einzugeben, als explizit einen Rückruf bereitzustellen und die Anfrage vollständig zu puffern, wenn Sie die Antwort einfach irgendwo anders weiterleiten. –

Antwort

0

Meine empfohlene Vorschlag:

script. 
    $(function() { 
    $('#getRecentReports').on('click', function() { 
     $.get('recentreports', function(body) { 
     $('#jsonbody').html(body) 
     }); 
    }); 
    }); 

button(
    id = "getRecentReports" 
) 

dieses Renders:

<script> 
    $(function() { 
    $('#getRecentReports').on('click', function() { 
     $.get('recentreports', function(body) { 
     $('#jsonbody').html(body) 
     }); 
    }); 
    }); 

</script> 
<button id="getRecentReports"></button> 

Oder alternativ:

script. 
    function getRecentReports() { 
    $.get('recentreports', function(body) { 
     $('#jsonbody').html(body) 
    }); 
    } 

button(
    onclick = "getRecentReports()" 
) 

dieses Renders:

<script> 
    function getRecentReports() { 
    $.get('recentreports', function(body) { 
     $('#jsonbody').html(body) 
    }); 
    } 

</script> 
<button onclick="getRecentReports()"></button> 
+0

Ich habe Ihren ersten Vorschlag versucht und diesen Fehler erhalten: Uncaught ReferenceError: $ ist nicht definiert. Ich habe das jquery npm-Modul mit seinen zwei Abhängigkeiten jsdom und xmlhttprequest installiert (was ich anfangs vergessen habe). Ich habe meinem Skript auch folgendes hinzugefügt: var $ = require ('jQuery'); was dann diesen Fehler auslöst: testapi: 2 Uncaught ReferenceError: $ ist nicht definiert. Ich nehme an, dass etwas nicht stimmt mit der Art, wie ich auf das jQuery-Modul referenziere. Irgendwelche Vorschläge? – Sledge

+0

Lesen Sie einige Tutorials zu Knoten im Allgemeinen und wie Sie statische Anfragen mit Express bereitstellen, das sind wirklich grundlegende Dinge, mit denen Sie Schwierigkeiten haben. Sie wissen nicht genau, wo Sie diese "required" -Linie haben. Knoten- und clientseitiges JavaScript teilen keine Ressourcen, sodass das Definieren einer Variablen auf der einen Seite der anderen Seite keinen Zugriff darauf ermöglicht. Meine Empfehlung, wenn Sie den einfachsten Weg wollen, ist 'script (src =" url to jquery cdn ")' in Ihre Jade-Datei im 'head' einzuschließen, so dass Sie keine Express-Serve jquery von einem npm-Modul haben müssen. –