2015-12-08 4 views
5

Ich schreibe eine Knoten App mit React, mit Knoten-Postgres und Superagent für Back-End-Aufrufe. Nehmen wir an, ich mache eine GET-Anfrage und benutze das JSON, das es zurückgibt, um eine Tabelle von Schülern zu füllen. Meine API sieht folgendermaßen aus:ECONNREFUSED, wenn GET-Anfrage in App, aber API gibt JSON erfolgreich zurück

Beim Laden der Seite wird dies aus dem Speicher aufgerufen, um ein Schüler-Array festzulegen. Es scheint so, ist etwas schief geht hier vor:

var request = require('super agent'); 

function getStudents() { 
    request 
    .get('/api/getStudents') 
    .set('Accept', 'application/json') 
    .end(function(err, res) { 
     if (err) { 
     console.log("There's been an error: getting students."); 
     console.log(err); 
     } else { 
     return res; 
     } 
    }); 
} 

Wenn ich localhost:3000/api/getStudents kräuseln, ich die JSON-Antwort erhalte ich erwarten.

Allerdings, wenn ich diese beim Laden der Seite aufrufen, erhalte ich eine ECONNREFUSED Fehler:

Error: connect ECONNREFUSED 127.0.0.1:80] 
code: 'ECONNREFUSED', 
errno: 'ECONNREFUSED', 
syscall: 'connect', 
address: '127.0.0.1', 
port: 80, 
response: undefined 

nicht sicher, warum ich auf dem HTTP-Port einen Fehler bin immer. Dies ist das erste Mal, dass ich node-postgres, superagent und React nutze, damit jede Hilfe geschätzt wird.

Bearbeiten: Vergessen zu erwähnen, dass ich in der Lage bin, POST-Anfragen zu machen und Elemente in die Datenbank ohne Fehler einzufügen. Dieser Fehler tritt nur auf, wenn ich eine GET-Anfrage versuche.

+2

Haben Sie öffnen Port 80 hoch? Scheint so, als ob super-agent standardmäßig auf localhost: 80 stünde, außer du spezifizierst einen Host und Port und es scheint, als ob der Port 3000 sein soll. – Quy

+0

Weißt du, wie das zu erreichen ist, @Quy? Ich kann keine Dokumentation oder Beispiele finden, die den Port mit Superagenten setzen. Ich habe versucht '.set ('port', 5432)' und '.set ('port', 3000)', aber bisher kein Glück. Danke für den Vorschlag. – johnprisco

+0

probiere 'request.get ('http: // localhost: 3000/api/getStudents')' – Quy

Antwort

4

Versuchen Sie dies in der get Methode (den vollständigen Pfad URL einfügen):

request 
    .get('http://localhost:3000/api/getStudents') 
    .set('Accept', 'application/json') 
    .end(function(err, res) { 
    if (err) { 
     console.log("There's been an error: getting students."); 
     console.log(err); 
    } else { 
     return res; 
    } 
    }); 

Überprüfen Sie die Dokumentation für CORS für ein Beispiel mit absoluten URLs aus:

https://visionmedia.github.io/superagent/#cors

+1

Danke, das hat funktioniert, wie ich es implementiert habe. Es überrascht nicht, dass ich mich nicht an die Best Practices von React hielt, also habe ich etwas Refactoring durchgeführt und es funktionierte ohne die vollständige URL. Danke für Ihre Hilfe! – johnprisco