在应用程序中发出 GET 请求时 ECONNREFUSED,但 API 成功返回 JSON
Posted
技术标签:
【中文标题】在应用程序中发出 GET 请求时 ECONNREFUSED,但 API 成功返回 JSON【英文标题】:ECONNREFUSED when making GET request in app, but API returns JSON successfully 【发布时间】:2016-03-12 20:36:10 【问题描述】:我正在用 React 编写一个节点应用程序,使用 node-postgres 和 superagent 进行后端调用。 假设我正在发出 GET 请求并使用它返回的 JSON 来填充学生表。我的 API 如下所示:
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);
);
);
);
在页面加载时,从商店调用它来设置学生数组。这里似乎出了点问题:
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;
);
如果我 curl localhost:3000/api/getStudents
,我会得到我期望的 JSON 响应。
但是,当我在页面加载时调用它时,我收到 ECONNREFUSED 错误:
Error: connect ECONNREFUSED 127.0.0.1:80]
code: 'ECONNREFUSED',
errno: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 80,
response: undefined
不知道为什么我在 HTTP 端口上遇到错误。这是我第一次使用 node-postgres、superagent 和 React,因此非常感谢任何帮助。
编辑: 忘了提到我能够发出 POST 请求并将项目插入数据库而不会出现任何错误。此错误仅在我尝试 GET 请求时发生。
【问题讨论】:
你打开80端口了吗?似乎超级代理默认为 localhost:80 除非您指定主机和端口,并且似乎您希望端口为 3000。 你知道怎么做吗,@Quy?我找不到任何使用 superagent 设置端口的文档或示例。我试过.set('port', 5432)
和.set('port', 3000)
,但到目前为止还没有运气。感谢您的建议。
试试request.get('http://localhost:3000/api/getStudents')
【参考方案1】:
在 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;
);
查看 CORS 文档以获取使用绝对 URL 的示例:
https://visionmedia.github.io/superagent/#cors
【讨论】:
谢谢,这与我实现它的方式一致。不出所料,我没有遵循 React 最佳实践,所以我做了一些重构,它在没有完整 URL 的情况下工作。感谢您的帮助!【参考方案2】:如果您的请求 URL 中没有协议,也会发生此错误。
相反
request.get('www.myexample.com/api/getStudents')
做
request.get('https://www.myexample.com/api/getStudents')
^^^^^^^^
【讨论】:
以上是关于在应用程序中发出 GET 请求时 ECONNREFUSED,但 API 成功返回 JSON的主要内容,如果未能解决你的问题,请参考以下文章
使用 swift 4 发出 GET 请求在游乐场中有效,但在项目中无效
如何从flutter应用程序向本地主机发出http get请求?