web-dev-qa-db-fra.com

ECONNREFUSED lors de la requête GET dans l'application, mais l'API renvoie JSON avec succès

J'écris une application de nœud avec React, en utilisant un nœud postgres et un super-agent pour les appels dorsaux . Disons que je fais une requête GET et que j'utilise le JSON pour retourner à une table d'étudiants. Mon API ressemble à ceci:

import pg from 'pg';
import Router from 'express';
let router = new Router();
let conString = "postgres://user:pass@localhost/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);
    });
  });
});

Lors du chargement de la page, cela est appelé depuis le magasin pour définir un tableau d'étudiants. Il semble que quelque chose ne va pas ici:

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

Si je curl localhost:3000/api/getStudents, je reçois la réponse JSON que je prévois.

Cependant, lorsque j'appelle cela au chargement de la page, j'obtiens une erreur ECONNREFUSED:

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

Je ne sais pas pourquoi je reçois une erreur sur le port HTTP. C'est la première fois que j'utilise node-postgres, superagent et React; toute aide est donc la bienvenue. 

Éditer: J'ai oublié de préciser que je pouvais faire des demandes POST et insérer des éléments dans la base de données sans erreur. Cette erreur ne survient que lorsque je tente une requête GET.

9
johnprisco

Essayez ceci (en insérant l’URL du chemin complet) dans la méthode 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;
    }
  });

Consultez la documentation de CORS pour un exemple d'utilisation des URL absolues:

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

4
Quy

L'erreur se produira également si le protocole ne figure pas dans l'URL de votre demande.

Au lieu

request.get('www.myexample.com/api/getStudents')

faire

request.get('https://www.myexample.com/api/getStudents')
             ^^^^^^^^
0
Kim Kern