2015-12-08 20 views
5

Piszę aplikację węzła z React, przy użyciu węzła-Postgres i Superagent dla wywołań zaplecza. Załóżmy, że robię żądanie GET i przy użyciu JSON wraca do wypełnienia tabeli studentów. Moje API wygląda następująco:ECONNREFUSED podczas wysyłania żądania GET w aplikacji, ale API zwraca JSON pomyślnie

import pg from 'pg'; 
import Router from 'express'; 
let router = new Router(); 
let conString = "postgres://user:[email protected]/db_name"; 

router.get('/getStudents', function(req, res) { 
    var results = []; 

    pg.connect(conString, function(err, client, done) { 
     if (err) { 
     done(); 
     console.log(err); 
     return res.status(500).json({success: false, data: err}); 
    } 

    var query = client.query('SELECT first_name, last_name, email FROM students'); 

    query.on('row', function(row) { 
     results.push(row); 
    }); 

    query.on('end', function() { 
     done(); 
     return res.json(results); 
    }); 
    }); 
}); 

Podczas ładowania strony wywoływane jest ze sklepu w celu ustawienia tablicy uczniów. Wydaje się, że coś jest nie tak tutaj:

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; 
     } 
    }); 
} 

Gdybym zwijają localhost:3000/api/getStudents, otrzymuję odpowiedź JSON mam oczekiwać.

Jednakże gdy zgłoszę tego na stronie obciążenia, otrzymuję ECONNREFUSED błąd:

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

Nie wiem, dlaczego Dostaję błąd na porcie HTTP. To jest mój pierwszy raz używając node-postgres, superagenta i React, więc każda pomoc jest doceniana.

Edytuj: Nie pamiętam, że mogę wysyłać żądania POST i wstawiać elementy do bazy danych bez żadnych błędów. Ten błąd występuje tylko wtedy, gdy próbuję wysłać żądanie GET.

+2

Czy otwarte do portu 80? Wygląda jak domyślne ustawienia super-agenta na localhost: 80, chyba że podasz host i port i wygląda na to, że chcesz mieć 3000. – Quy

+0

Czy wiesz, jak to osiągnąć, @Quy? Nie mogę znaleźć żadnej dokumentacji ani przykładów ustawienia portu z superagentem. Próbowałem '.set ('port', 5432)' i '.set ('port', 3000)', ale bez powodzenia do tej pory. Dzieki za sugestie. – johnprisco

+0

spróbuj 'request.get ('http: // localhost: 3000/api/getStudents')' – Quy

Odpowiedz

4

Spróbuj tego (wstawiając pełną url path) w metodzie get:

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; 
    } 
    }); 

Zapoznaj się z dokumentacją CORS na przykład z wykorzystaniem adresów URL bezwzględnych:

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

+1

Dzięki temu działało to, w jaki sposób go implementowałem. Jak można się było spodziewać, nie stosowałem się do najlepszych praktyk, więc zrobiłem trochę refaktoryzacji i działało bez pełnego adresu URL. Dzięki za pomoc! – johnprisco