2015-12-08 16 views
5

私はReactでノード・アプリケーションを作成しています。バックエンド・コール用にnode-postgresとsuperagentを使用しています。 私はGETリクエストを作成し、それが返すJSONを使って生徒の表を埋めるとしましょう。私のAPIは、次のようになります。ページのロードでアプリでGETリクエストを行うとECONNREFUSEDが返されますが、APIがJSONを正常に返します

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

、これは学生の配列を設定するために店から呼び出されます。何かが間違ってここに起こっているように思える:

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

私はlocalhost:3000/api/getStudentsをカールした場合、私は私が期待してJSONレスポンスを取得します。私は、ページの読み込みでこれを呼び出すとき

はしかし、私はECONNREFUSEDエラーが表示されます。なぜ私はHTTPポート上のエラーを取得しています

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

わかりません。これはnode-postgres、superagent、およびReactを使用して初めてのことです。

編集:私はPOSTリクエストを行い、アイテムをデータベースにエラーなく挿入することができます。このエラーは、GET要求を試行しているときにのみ発生します。

+2

あなたが開いていましたアップポート80?ホストとポートを指定しないと、ポートが3000になるように思われない限り、スーパーエージェントのデフォルトのlocalhost:80のように見えます。 – Quy

+0

@Quyを達成する方法は分かりますか?私は、スーパーエージェントを使ってポートを設定するための文書や例を見つけることができません。私は '.set( 'port'、5432)'と '.set( 'port'、3000)'を試しましたが、これまでは運がありませんでした。提案していただきありがとうございます。 – johnprisco

+0

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

答えて

4

get方法で(フルパスのURLを挿入)これを試してみてください:

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

は絶対URLを使用する例についてCORSのドキュメントをチェックアウト:

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

+1

ありがとう、これは私がそれをどのように実装していたかで動作しました。当然のことながら、私はベストプラクティスを遵守していなかったので、リファクタリングを行いました。完全なURLがなくても機能しました。ご協力いただきありがとうございます! – johnprisco

関連する問題